728x90
공부를 하다가 다 이해가 되는데 딱 저 ~ 연산자만 이해가 되지 않았다.
어떤 경우에는 그냥 1은 0으로, 0은 1로 바꾸라는데,
문제를 풀다가 이게 이렇게 되면 숫자가 엄청 커지는데...? 하고 의문점이 들어서
열심히 검색해서 이해하게 되었다...
Java일 경우 문제
public class Main{
public static void main(String []args){
byte a = 19;
System.out.printf("%d\n", ~a);
}
}
byte 자료형인 a의 값인 15를 2진법으로 변환하면 00001111이 된다.
이걸 보통 방식으로 1은 0으로, 0은 1로 변환하면 11110000이 되는데,
이걸 값으로 그냥 환산하면 240이 되는데 결과는 -16이란다...
그래서 읭..? 왜 이러는거지? 했는데 자바는 무조건 부호를 갖는 signed 타입이고,
signed 타입의 경우에는 최상위 비트로 부호를 구분한다고 한다.
그래서 11110000으로는 부호를 구분하고, 00001111에서 1을 더해서 나온 값으로 숫자를 판별한다.
즉, 이렇게 해서 ~a 는 -16이 된다.
만약 unsigned 타입이라면 그냥 1은 0, 0은 1로 바뀐 240이 맞다.
728x90
'공부 일지 > 정보처리산업기사' 카테고리의 다른 글
[정보처리산업기사/실기] 22년 2차 정보처리산업기사 실기 시험 후기 및 가채점 방법 (0) | 2022.07.25 |
---|---|
[정보처리산업기사/실기] 문제 출제 유형 (0) | 2022.06.23 |
[정보처리산업기사] 모의고사 5회 오답노트 (0) | 2022.04.19 |
[정보처리산업기사] 모의고사 4회 오답노트 (0) | 2022.04.18 |
[정보처리산업기사] 모의고사 3회 오답노트 (0) | 2022.04.18 |