Skip to content

Instantly share code, notes, and snippets.

@skawnkk
Last active January 16, 2021 15:05
Show Gist options
  • Save skawnkk/6ccb8ab9cc8df1dd95c348bd8fb6b589 to your computer and use it in GitHub Desktop.
Save skawnkk/6ccb8ab9cc8df1dd95c348bd8fb6b589 to your computer and use it in GitHub Desktop.
day1 이진덧셈기/진법변환기
function bin2dec(bin) {
var answer = 0;
for (let i = 0; i < bin.length; i++) {
answer += 2 ** [i] * bin[i]
}
return answer;
}
bin = [0, 1, 1, 1]
console.log(bin2dec(bin))
function switchletter(bin) {
let sum = 0;
if (bin.length !== 0) {
for (i = 0; i < 4; i++) {
sum += bin[i] * 2 ** i
}
switch (sum) {
case 10:
sum = "A";
break;
case 11:
sum = "B";
break;
case 12:
sum = "C";
break;
case 13:
sum = "D";
break;
case 14:
sum = "E";
break;
case 15:
sum = "F";
break;
}
answer.push(sum)
bin.splice(0, 4)
switchletter(bin)
}
return answer
}
function bin2hexa(bin) {
while (bin.length % 4 !== 0) {
bin.push(0)
}
switchletter(bin)
return answer.join("")
}
let answer = [];
console.log(bin2hexa([1, 1, 1, 0, 1, 0, 1]))
function byteadder(byteA, byteB) {
var answer = [];
var carry = false;
const long = (byteA.length > byteB.length) ? byteA : byteB
const short = (byteA.length < byteB.length) ? byteA : byteB
for (i = 0; i < short.length; i++) {
const result = fulladder(byteA[i], byteB[i], carry);
answer.push(result[1])
carry = result[0]
}
for (i = short.length; i < long.length; i++) {
const result = fulladder(byteA[i], byteB[i], carry);
answer.push(result[1])
carry = result[0]
}
answer.push(carry);
return answer;
}
function dec2bin(decimal) {
while (decimal >= 2) {
((decimal % 2) === 0) ? answer.push(false): answer.push(true);
decimal = parseInt(decimal / 2);
}
answer.push(true)
return answer
}
var answer = [];
const decimal = 173
console.log(dec2bin(decimal))
function halfadder(a, b) {
let sum = (a || b) && !(a && b); //xor_비트연산에서는 ^ 으로 표기->0,1로 반환한다.
let carry = a && b; //and
let answer = [!!carry, !!sum]; //__!!(true,false형변환)
return answer;
}
function fulladder(a, b, carry) {
let r1 = halfadder(a, b)
let r2 = halfadder(r1[1], carry)
let answer = [r1[0] || r2[0], r2[1]] //r1에서의 캐리, r2에서의 캐리의 합
return answer;
}
function switchletter(hexa) {
let answer = [];
let decsum = 0;
const result = hexa.split("").reverse()
console.log(result)
for (let i = 0; i < result.length; i++) {
let dec = result[i]
switch (dec) {
case "A":
dec = 10
break;
case "B":
dec = 11
break;
case "C":
dec = 12
break;
case "D":
dec = 13
break;
case "E":
dec = 14
break;
case "F":
dec = 15
break;
default:
dec = +dec
break;
}
decsum += 16 ** i * dec
}
while (decsum >= 2) {
((decsum % 2) === 0) ? answer.push(false): answer.push(true);
decsum = parseInt(decsum / 2);
}
answer.push(true)
return answer
}
console.log(switchletter("AF"))
//af -> 175 ->10101111
@skawnkk
Copy link
Author

skawnkk commented Jan 4, 2021

day1완료 (비트논리연산자 사용해서 다시해보깅..)

@skawnkk
Copy link
Author

skawnkk commented Jan 5, 2021

이진덧셈기 모두 수정했습니당

@skawnkk
Copy link
Author

skawnkk commented Jan 5, 2021

2진법->16진법

@skawnkk
Copy link
Author

skawnkk commented Jan 5, 2021

16진법->2진법

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment