最近被Verilog中的有符号和无符号迷惑了一下,终于有点眉目了,赶紧写下来。
temp2 = -8'd18;
temp3 = 8'sd18;
temp4 = -12/3;
temp5 = -8'd12/3;
temp6 = -8'sd12/3;
-8'd18表示输入的是-18,所以结果为11101110
8'sd18表示输入的是有符号的18
首先记住,有符号数的运算全都是补码的方式。
下面看3个例子:
-------------------------------------------------------------
reg [7:0] temp1, temp2, temp3, temp4, temp5,
temp6
;
temp1 = 8'd18;
-------------------------------------------------------------
以下是仿真的结果;
先看前3个
8'd18表示输入的是无符号的十进制数18
再看后3个
-12/3
的结果为-4的补码
-8'd12/3
的结果比较奇怪,因为-8'sd12可以分解为 -(8'd12)/3,就是11110100/3,结果为01010001
-8'sd12/3
的结果为-4的补码
这里可以看出,加上了s后,在运算的时候编译器把数当作有符号数计算,不加s时,即使是补码的负数,也会直接当作无符号数处理。