永发信息网

关于C语言移位的问题

答案:3  悬赏:70  手机版
解决时间 2021-02-08 18:30
  • 提问者网友:王者佥
  • 2021-02-08 03:02
不理解《深入理解计算机系统》中的一段话:
“对于一个由w位组成的数据类型,如果要移动k>=w位会得到什么结果呢?......C语言标准很小心地规避了说明在这种情况下该如何做。在许多机器上,当移动一个w位的值时,移位指令只考虑位移量的低log 2 w位(2是底数,格式不知道怎么打不出来),因此实际上位移量就是通过计算k mod w得到的。“

不理解的地方是:
①"移位指令只考虑位移量的低log 2 w位“,是什么意思?是不是说不管左移还是右移,都会从低log 2 w位开始?

②“当移动一个w位的值时,移位指令只考虑位移量的低log 2 w位”怎么推论出来“===>因此实际上位移量就是通过计算k mod w得到的。”?

财富值不多了,请大家谅解!
最佳答案
  • 五星知识达人网友:青灯有味
  • 2021-02-08 03:43
只考虑位移量的log2w的意思是,如果把位移量k换算成二进制的话,比如说,w为32,log2w就是5,k为32,换算成二进制就是100000,也就是只考虑后5位,这不就相当于k对m取余么,所以下面一句也就可以理解了。。我以为举个例子会比较好理解的。。下面还是附上我整个的思考逻辑吧。。

当移动一个w位的值时,移位指令只考虑位移量的低log 2 w位
c语言中规定的w位数一般为8、16、32、64。
假设k的低log 2 w位的值为u
那么高于log 2 w位的值显然都是w的倍数
k=n*w+u
其中n>=0,当n=0的时候,k=1的时候,k>=m
所以k mod w = (n*w+u) mod w = u
全部回答
  • 1楼网友:拜訪者
  • 2021-02-08 05:28
右移有分逻辑右移和算术右移。左移不存在逻辑左移和算术之分。算术右移指的是当符号位是1时,右移的时候补1,符号位是0时补0. 逻辑右移则全部补0 java语言有逻辑右移>>> 算术右移>> c的话,语言本身未规定右移类型,跟编译器有关。gcc好像右移是算术右移,不存在逻辑右移。 msvc编译器还没试过。
  • 2楼网友:十鸦
  • 2021-02-08 04:22
如果是一个w位的二进制数,如果要移动k>=w位,移动多少位后面补多少0,所以结果为0
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯