[C++] signed, unsigned 키워드, 2의 보수

Learning 

When: 1학년 11월 12일

 

Understanding:

간단 설명: 정수형 타입에 값을 담을 때, 부호 유무를 선택할 수 있게 만들어주는 키워드입니다.
1바이트, 즉 8비트짜리 정수형 자료형이 있다고 가정하고 설명하자면 변수의 앞에 sigend를 붙이거나
붙이지 않으면(선언하지 않으면 암시적으로 붙습니다.) 부호가 있는 값을 할당할 수 있습니다.
이진수에서 부호가 있는 수를 표현할 때는 2의 보수를 사용합니다. 마지막 비트를 부호 비트로 사용하는데,
-1을 표현할 때는 1을 먼저 표현하고, => [0000 0001](1) 모든 비트를 반전시킵니다. => [1111 1110]
그리고 반전된 비트에 1을 더하면 됩니다. => [1111 1111](-1)
그냥 마지막 비트가 1일 때는 음수로, 0일 때는 양수로 처리하면 되지 않겠느냐라는 생각이 들 수 있습니다.
 하지만 그럼 값을 표현하는 절댓값 비트가 0일 때, 부호 비트가 1과 0일 수 있고,
[0000 0000](-0)[1000 0000](+0)이 생겨 불필요하게 비트를 하나 낭비하게 됩니다.
우리는 그냥 0 하나만 있으면 되니까요. 하지만 2의 보수로 음수를 표현한다면
0을 -로 바꾸려고 해도 0이 되기 때문에 0은 하나가 되고, -0을 표현하는 비트는 -128을 표현하는 비트가 되어
비트를 낭비하지 않고 나타낼 수 있는 수의 가짓수가 정확히 비트 수큼이 됩니다.
unsigned를 사용하면 부호비트가 필요 없어지기 때문에 깊 생각하지 않아도 됩니다.
가장 작은 숫자인 [0000 0000](0)부터 가장 큰 숫자인 [1111 1111](255)까지 나타낼 수 있습니다.

 

Result: 그냥 옛날에 컴퓨터 만들 때나 쓰일 것 같던 정보 시간에 배운 내용이 그대로 적용되어 자료 구조를 이해하게 되니 신기했습니다. 

'C++' 카테고리의 다른 글

[C++] 포인터, delete  (0) 2025.12.01
[C++] 입력과 출력  (0) 2025.11.14
[C++] class와 struct (C# 하던 사람 관점)  (0) 2025.11.10
[C++] 전처리 지시문(Preprocessor directives)  (0) 2025.11.09
[C++] 빌드 (Build)  (0) 2025.11.08