[정보처리기사] java의 비트 계산법 ~a, a^b, a&b, a|b
[정보처리기사] java 의 비트 계산법 ~a, a^b, a&b, a|b
정답
-16
28
3
31
("%d\n" , ~a); 의 계산법
2의 보수 = 1의 보수 +1 (뒤집힌다)
0000 1111
1111 0000
1000 1111 = 2의 보수 = 1의 보수 +1 (뒤집힌다)
+ 1
= 10010000 = > ~a => -16
~a = -16
("% d\n" , a^b); 의 계산법
a^b = 서로 다를 때 1을 나타낸다.
0000 1111
0001 0011
=0001 1100
= 28
("%d\n" , a&b); 의 계산법
a&b 둘다 1이라고 할 때 1을 나타낸다.
0000 1111
0001 0011
0000 0011 = 3
= 3
("%d\n" , a|b ); 의 계산법
a|b 하나라도 1이면 =>1이다.
0000 1111
0001 0011
0001 1111 = 31
= 31
java 의 비트 계산법
Java에서 `byte` 타입을 사용하면 값이 8비트로 표현되기 때문에, `byte a = 15`인 경우 a는 `00001111`로 표현됩니다. 이것은 이미 바이트(8비트) 표현을 사용하고 있기 때문에 앞서 설명한 8비트 표현 과정을 거칠 필요가 없습니다.
일반적인 10진수에서 2진수로의 변환에서 'byte' 키워드가 없다면(예: `int a = 15`), a는 2진수로 '1111'로 계산됩니다. 이 경우 추가적으로 8비트로 표현하려면 위에서 설명한 방식처럼 스트링 포맷 작업을 수행해야 합니다.
결론적으로, byte 타입을 사용할 때 8비트 표현이 자동으로 적용되며 a = 15 라면 '00001111'로 계산됩니다. 반면 기본적인 10진수에서 2진수로 바꾼다면 a = 15 일 때 '1111'로 계산되는 것이 맞습니다. 이 경우에도 필요시 8비트로 만들어 진짜로 나타낼 수 있습니다.
이 문제에서, 0000 1111로 계산되는 이유로는 Byte a = 15라고 계산 했기에
0000 1111 로 계산된 것이고,
원래는 byte를 사용하지 않는다면, 1111 이 맞다.
댓글