mayo20102012 发表于 2013-10-27 20:12:57

关于算术左移与逻辑左移的问题

书上说 算术左移和逻辑左移一样,但是对于一个有符号数8'b1000_1010(负的)算术左移一位 岂不变成8'b0001_0100,成正的了。求解释。。。。烦请各位动动手指,解释解释啊!

lans0625 发表于 2013-10-27 20:30:03

我也不明白,不用,VHDL我这样。。。a(6 downto 1)<=a(6 downto 0);a(0)<='0';....

mayo20102012 发表于 2013-10-27 20:31:53

额 我用的是verilog..

zkf0100007 发表于 2013-10-27 20:34:53

符号位不动

qwernet 发表于 2013-10-27 20:39:10

LSL和ASL的确是一样的。左移一位相当于乘以2。某些数左移一位符号变了,是因为溢出了。

mayo20102012 发表于 2013-10-27 20:47:26

qwernet 发表于 2013-10-27 20:39 static/image/common/back.gif
LSL和ASL的确是一样的。左移一位相当于乘以2。某些数左移一位符号变了,是因为溢出了。 ...

谢谢你啊!不过,不都是最高位存储的都是符号位么?既然这样,只要左移,那个符号位都会被符号位的下一位代替吧?符号位的下一位要是0的话,那就会负的变正了。还是不懂你说的移位溢出。。

qwernet 发表于 2013-10-27 21:50:28

mayo20102012 发表于 2013-10-27 20:47 static/image/common/back.gif
谢谢你啊!不过,不都是最高位存储的都是符号位么?既然这样,只要左移,那个符号位都会被符号位的下一位 ...

左移一位相当于乘以2。对8位有符号整型a来说,如果-64 <= a <= 63,那么左移一位就不会溢出,如果a < -64或a > 63,那么左移一位就会溢出,符号位变了,在CPU里溢出标志要置位。你给的数已经小于-64了。
页: [1]
查看完整版本: 关于算术左移与逻辑左移的问题