23.07.24 12:18 작성
·
341
1
cout << std::bitset<4>(0110 >> 2) << endl;으로 넣어 출력했더니
답이 0010으로 나옵니다 (10진수는 18로 출력됨)
답은 0110 >> 2 하면 0001이 되어 1아닌가요?
왜 0010(18)이 출력되는지 궁금하여 여쭤봅니다.
미리 답변 감사드립니다.
답변 1
4
안녕하세요, 답변 도우미 Soobak 입니다.
C++
의 숫자 리터럴 표현 방식 때문입니다.
우선, 숫자 리터럴의 표현 방법에 대하여 설명드린 후, 질문하신 내용에 대해서 답변드리도록 하겠습니다.
10진수 : 숫자 앞에 특별한 접두사가 없습니다.
예를 들어, 10
은 '10진수 10
' 입니다.
8진수 : 숫자 앞에 0
이 오는 숫자를 8진수로 간주합니다.
예를 들어, 011
은 '8진수 11
' , 10진수로는 9
가 됩니다.
16진수 : 숫자 앞에 0x
또는 0X
가 오는 숫자를 16진수로 간주합니다.
예를 들어, 0x10
은 '16진수 10
', 10진수로는 16
이 됩니다.
2진수 : 숫자 앞에 0b
또는 0B
가 오는 숫자를 2진수로 간주합니다.
예를 들어 0b10
은 '2진수 10
', 10진수로 2
가 됩니다.
따라서, 질문하신 cout << std::bitset<4>(0110 >> 2) << endl;
에서,0110
은 8진수 110
으로, 10진수로는 72
가 됩니다.
컴파일러를 통해서도 해당 숫자의 실제값은 72
임을 확인하실 수 있습니다.
즉, 실제로 코드가 수행하는 연산은 72 >> 2
이며, 이를 계산하면 10진수로 18
이 됩니다.
이 때, bitset<4>
를 사용하셨으므로, '10진수 18
' 을 '2진수로 표현한 10010
' 에서
비트의 일부가 잘려 0010
만 출력되는 것입니다.
원하시는 의도처럼 '2진수 0110
' 을 연산하시려면, 강의에서의 코드처럼 0b0110
으로 올바른 접두사를 붙여 작성하셔야 합니다.
2023. 07. 24. 14:33
친절한 답변 감사합니다. 이해 완료하였습니다!