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,为什么?
展开
 我来答
kitty0702
2016-11-22 · TA获得超过1086个赞
知道小有建树答主
回答量:646
采纳率:66%
帮助的人:267万
展开全部

请注意,题目中要求的是循环移位。

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位,表示移位的位数不会太大。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式