C++循环移位
题目如下:编写函数实现value左右循环移位(即移出的位在另一端填入)。函数原型为intmove(intvalue,intn);其中value为要循环移位的数,n为移位的...
题目如下:编写函数实现value左右循环移位(即移出的位在另一端填入)。函数原型为int move(int value,int n);其中value为要循环移位的数,n为移位的位数,n的绝对值不大于16,整型为16位。如果n<0表示左移,n>0表示右移,n=0表示不移位。在主函数中输入数据并调用该函数输出结果。
示例是134744064 -8,输出是134742024,但是134744064的二进制是1000000010000000100000000000,左移8位之后是1000000010000000000010000000是134742144,为什么? 展开
示例是134744064 -8,输出是134742024,但是134744064的二进制是1000000010000000100000000000,左移8位之后是1000000010000000000010000000是134742144,为什么? 展开
1个回答
展开全部
请注意,题目中要求的是循环移位。
134744064的二进制是1000 0000 1000 0000 1000 0000 0000,但实际前面还有四个0,
才能组成32位二进制数(现在大多系统的int都是32位)。这样的话,
134744064的二进制将是: 0000 1000 0000 1000 0000 1000 0000 0000。
那么循环左移位8位,是需要将补齐32位的二进制数最高8位移到最低8位,于是就有:
0000 1000 0000 1000 0000 1000 0000 0000
0000 1000 0000 1000 0000 0000 0000 1000
而后者的数值的10进制表示就是134742024134742024了
更多追问追答
追问
但是题目里写整型16位是什么意思?
追答
整型16位,说的是n,不是value吧。如果说value为16位整型数据的话,那题目肯定就不对了,因为16位整型数据最大才是65535啊,根本不可能有134744064这个数值了。
看来原题目表述确实有些不够严谨、不够准确
n为16位,表示移位的位数不会太大。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询