赞
踩
问题:负数右移之后符号位还是最高位吗?-128右移7位
解答:
(1)逻辑右移(>>)时,不考虑符号位,每右移一位,左边补一个零(设计时可人为标记符号位的位置);
(2)算数右移(>>>)时,考虑符号位,每右移一位,左边补一次符号位。
所以,a = 9’d-128 //1_1000_0000
reg [8:0] b; //设计时,知道b的实际有效位数为2,也可直接reg[1:0]b,此时逻辑右移后符号位也正确
b = a >> 7 结果为3; //0_0000_0011
b = a >>> 7 结果为-1。 //1_1111_1111
续:之后再取绝对值,方法一致吗?
取绝对值操作:
reg [7:0] d_a;
always@(*)
begin
if(a[8]) //符号位,无论是>>还是>>>,只要设计者找到正确的符号位作为条件,即可带入该代码得到正确的绝对值;移位之后正确的符号位是b[1]
d_a = 1+(~a[7:0]);
else
d_a = a[7:0];
end
文章仅作为个人思路整理,如有不足欢迎批评指正
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。