verilog 有符号数运算

来源:百度知道 编辑:UC知道 时间:2024/05/28 04:40:57
在下面的代码中:
reg [0:5] bar;
integer tab;
tab = - 4'd12 /4;//tab被赋于十进制1073741821(位值为011...11101)
我的问题是:作为有符号数,为什么进行上步操作后,tab对应的十进制数是1073741821呀?
请您给我详细的讲一下好吗?本人初学者,有很多地方想不明白。谢谢!

这是正确的,解释如下:
integer在verilog中是有符号的32位数,最高位为符号位,表示的范围为:
-(2的31次方)到2的31次方减1. tab是负数(-3),它的补码即为011...11101,若用十进制显示则为1073741821,你若用有符号的十进制显示则会显示-3.
你观察一下011...11101,若加个3会怎么样?是不是只有最高位为1了?这就是补码的原理。