verilog 有符号数运算在下面的代码中:reg [0:5] bar;integer tab;tab = - 4'd12 /4;//tab被赋于十进制1073741821(位值为011...11101)我的问题是:作为有符号数,为什么进行上步操作后,tab对应的十进制数是1073741821呀?本人初学者,有很多地方想不明白.

问题描述:

verilog 有符号数运算
在下面的代码中:
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了?这就是补码的原理.