在Java及JavaScript中提供了无符号右移操作符“>>>”,无符号右移操作符与普通右移操作符“>>”的区别是>>在右移时将以符号扩展原则进行右移,即在右移过程中它将保持原有数据的正负号不变,简单地说,就是在右移正数时高位补0、右移负数时则高位补1,而无符号右移操作符>>>在右移时不考虑符号问题,即无论右移正数还是负数,其最高位都是补0。
无符号右移本质上是将被右移的数所有存储位都视为数据位,因此很容易想到,如果想在C++中实现无符号右移,可以先将拟进行无符号右移的数转换成无符号类型,然后执行普通右移就可以了。
以下是在VS2003中编写的验证代码: