问题:负数右移之后符号位还是最高位吗?-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@(*)
右移操作与绝对值:负数移位符号变化及取绝对值技巧

本文探讨了负数在逻辑右移和算数右移后的符号变化,并提供了取绝对值的实现方法。重点在于理解移位操作中符号位的处理以及如何通过编程确保正确计算负数的绝对值。
最低0.47元/天 解锁文章
882

被折叠的 条评论
为什么被折叠?



