问题描述: 我在写循环左移函数时,写成如下格式:
inline int Crol(int value, int bits) {
return value<<bits | value>>(sizeof(value) * 8-bits);
}
测试数据时候,发现出错。 对于0x80000000出错,不是想得到的数据。接下来使用bitset进行测试:
1. C++中的>>位移运算符都是对于符号整数来说,必须保持其符号位,所以若最高位为1,你右移的时候会补齐1,而非0;
诸如0x80000000>>1 得到结果为0xC0000000.
解决方案有两个:
1. 将其设置为unsigned int.
2.使用bitset,bitset提供了位移操作符。