在C/C++中如何执行无符号右移操作(类似Java中的 >>>)?
unsigned int result = (unsigned int)valueToBeShifted >> shiftAmount;
请注意,在C语言中,对于有符号类型的>>
操作并不保证会得到有符号右移结果,这是实现定义的行为。然而,大多数常见的实现方式如果类型是有符号的,则会产生一个有符号的右移。
>>>
是无符号右移位运算符,因此我认为在C语言中这应该与下面的代码相同:
>>
unsigned int foo;
unsigned int bar = foo >> whatever;
C++中对于无符号值进行右移和有符号值进行右移的行为是相同的。如果最高位被设置,那么 >> 会移入一个1。
unsigned int myInt = 0x80000000;
myInt >>= 1;
myInt中存储的结果将是0xC0000000。
然而,如果最高有效位未设置,则对无符号值进行右移操作将按预期工作。
unsigned int myInt = 0x40000000;
myInt >>= 1;
结果将会是0x20000000
因此,在C++中,您可以采取以下措施以获得所需的行为: