在Java及JavaScript中提供了无符号右移操作符“>>>”,无符号右移操作符与普通右移操作符“>>”的区别是>>在右移时将以符号扩展原则进行右移,即在右移过程中它将保持原有数据的正负号不变,简单地说,就是在右移正数时高位补0、右移负数时则高位补1,而无符号右移操作符>>>在右移时不考虑符号问题,即无论右移正数还是负数,其最高位都是补0。
无符号右移本质上是将被右移的数所有存储位都视为数据位,因此很容易想到,如果想在C++中实现无符号右移,可以先将拟进行无符号右移的数转换成无符号类型,然后执行普通右移就可以了。
以下是在VS2003中编写的验证代码:
view plaincopy to clipboardprint?
- #include "stdafx.h"
- #include "iostream"
- using namespace std;
- int _tmain(int argc, _TCHAR* argv[])
- {
- int nOrg;
- cout << "被移位数:";
- cin >> nOrg;
- cout << "有符号右移2位:"
- << (nOrg >> 2 )
- << endl;
- unsigned int nuNum = (unsigned)nOrg;
- cout << "转换为无符号数:"
- << nuNum
- << endl;
- cout << "无符号右移2位:"
- << (nuNum >> 2 )
- << endl;
- return 0;
- }