C/C++에서 부호 없는 오른쪽 시프트(>>>)를 수행하려면 어떻게 해야 합니까?
C/C++에서 부호 없는 오른쪽 시프트(>>>)를 수행하려면 어떻게 해야 합니까?
C에서 부호 없는 이동을 하려면 부호 없는 유형에 대해 이동만 수행합니다.
unsigned int result = (unsigned int)valueToBeShifted >> shiftAmount;
다음과 같은 보장이 없다는 것을 참고하십시오.>>서명된 유형에서 C의 서명된 이동을 제공합니다. 이것이 구현 정의된 동작입니다.그러나 대부분의 일반적인 구현은 유형이 서명된 경우 서명된 이동을 생성합니다.
>>>부호 없는 오른쪽 시프트이므로 C에서는 다음과 같을 것으로 생각합니다.
unsigned int foo;
unsigned int bar = foo >> whatever;
C++에서 부호 없는 값에 대해 오른쪽 이동을 수행하는 것은 부호 있는 값에 대해 오른쪽 이동을 수행하는 것과 동일한 동작입니다.MSB가 설정되어 있으면 >>이 1로 이동합니다.
unsigned int myInt = 0x80000000;
myInt >>= 1;
myInt에 저장된 결과는 0xC0000000이 됩니다.
그러나 MSB가 설정되지 않은 경우 서명되지 않은 값에 대한 오른쪽 이동이 정상적으로 작동합니다.
unsigned int myInt = 0x40000000;
myInt >>= 1;
결과는 0x200000000이 될 것입니다.
따라서 C++에서 원하는 동작을 얻기 위해 다음을 수행할 수 있습니다.
- 한 번의 시프트를 수행하고 MSB를 제로로 만든 다음 나머지 시프트를 수행합니다.
- N비트를 오른쪽으로 이동하고, 상위 N비트를 0으로 제거합니다.
언급URL : https://stackoverflow.com/questions/2429479/how-do-i-perform-an-unsigned-right-shift-in-java-in-c-c
'programing' 카테고리의 다른 글
| strpbrk는 무엇의 약자입니까? (0) | 2023.10.06 |
|---|---|
| Google Maps API v3 infowwindow 닫기 이벤트/콜백? (0) | 2023.10.06 |
| LINQ에서 XML로 네임스페이스 무시 (0) | 2023.10.06 |
| 워드프레스의 add_action 함수 (0) | 2023.10.01 |
| SQL Server:잘못된 버전 661 첨부 (0) | 2023.10.01 |