不允许循环。只允许使用~&^|+运算符<lt>gt!
将x向右旋转4。
示例:rotate4(0x87654321(=0x18765432
最大操作次数:12
int rotate4(int x){
CODE
我有
int rotate4(int x){
return (x << 28) | (x >> 4);
这是输出一个负数,看起来是正确的,但却是负数。
测试:答案应为134217728[0x8000000]
我的答案是-134121728[0xf8000000]
我的思考过程是:
x<lt;将4个LSB代码向左移动28个空格,这意味着4个LSB将留在MSB位置。
x>gt;4使4个LSB下降,使得4个MSB为0。
我的代码是不是因为算术右移而产生了错误的结果?
将带符号的int
中的数据左移超过第30位会调用未定义的行为-您将把数据移到带符号的位中。这就是为什么我们几乎不应该对逐位运算符使用有符号操作数的众多原因之一。
在您的情况下,您甚至不能将0x87654321
存储在int
中,因为在转换之前它已经太大了。
更改为unsigned int
或更好的uint32_t
。那么这应该给出结果CCD_ 6。