signed integer의 최댓값을 2진수로 출력할 때, 31bit만큼만 출력되는 것에 대한 질문
signed int 타입 변수의 최댓값을 2진수로 출력해보면 31bit만큼만 출력됩니다.
최솟값을 출력했을 때는 32bit 만큼 출력되는데 어째서 최댓값 출력할 때는 31bit만큼만 나오는 것일까요?
32bit만큼 출력해서 0111 ... 1111 이렇게 나오게 하려면 어떤 라인에서 수정해야할까요?
답변 1
1
signed 정수들은 최상위(가장 왼쪽) 비트를 부호를 나타내는 비트로 씁니다. 즉, signed int 라면 1 비트는 부호 나타내는데 쓰고 나머지 31비트를 값을 나타내는데 쓰는거에요! 양수는 이 비트가 0 이고, 음수는 이 비트가 1 입니다. 그래서 sigend int 의 최대값이 2^32 가 아닌 2^31 인 이유입니다.(0 이 포함되니 정확히는 2^31 -1이 최대값) 31 비트로 값을 표현하기 때문이죠! INT_MAX 는 양수이기 때문에 최상위 비트는 0 입니다. 그래서 31비트만 출력된 것입니다. 앞의 0 이 생략되어서요! 예를 들어 111 이라는 비트가 있다면 이건 00000111 이라고 볼 수도 있지만 그냥 앞의 0 은 생략하고 111 이라고만 하잖아요! 6월도 06월 이렇게 말할 수도 있지만 0 빼고 6월이라고 하기도 하죠. 0 이 생략된건 그냥 이런 이유라고 생각해주시면 될 것 같아요!
이와 반대로 음수는 최상위 비트가 1입니다. 그래서 INT_MIN 이 1111 1111 1111 1111 이지만 사실상 가장 왼쪽 1 은 음수임을 나타낼 때 쓰는 비트구요, 실제 값을 표현하는건 나머지 31비트입니다. 얘는 맨 앞도 1이니까 생략되지 않고 32비트가 다 출력이 됐던겁니다.
printf("%032s\n", max_bi_buffer);
그래도 출력을 꼭 32자리로 맞추고 싶다면, 이렇게 출력 지정자를 %032s 라고 설정해주시면 돼요!
32 자리로 꼭 맞춰 출력하되 빈자리는 0 으로 채워 출력 하겠다는 의미입니다.
Export template 안됨
1
63
2
완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.
1
88
3
main 함수에서 왜 int만 선언이 되는걸까요
1
78
2
8비트 2진수 변환시 왜 1을 더해야하나요?
1
75
2
혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?
1
78
1
프로토타입과 함수간의 인자 불일치
1
87
2
12.12 헤더 관련 질문
1
74
2
Visual Studio Community 2026 사용 문의
1
167
2
Q. 15:30, 부호가 있는 8비트 정수 질문
1
71
2
getchar(), putchar()
1
111
3
강의자리ㅛ
1
92
2
비주얼스튜디오코드로 공부해도 상관없나요?
1
127
2
소스파일안에 여러 파일
1
87
2
F5와 F7의 차이
1
90
2
c = TWO * (a+b); 에서 a와 b는?
1
67
2
; 세미콜론을 붙이는 기준에 문의
1
78
1
Step over 기능 문의
1
64
2
2.6 강의 따옴표 출력 규칙 문의
1
87
2
int main 함수 관련 오류 문의
1
76
2
13.4 words[0]
0
73
2
11.7 함수를 구현해 봤습니다.
1
67
2
11.6 직접 strcmp와 strncmp를 구현해 보았습니다.
1
71
2
11.6 my_strcat과 my_strncat을 구현해봤습니다.
1
60
2
11.6 fit_str함수를 구현해 봤습니다.
1
59
2





