原码与补码
有符号数,在代码中可以使用十进制数赋值给有符号数,在电路中,数值按照补码形式存储
- 正数的补码:是其本身
- 负数的补码:除符号位外,其余位取反,然后
+1
reg signed [3:0] a, b;
a = 4'd6; //原码为 0110,补码为 0110
b = -4'd6; //原码为 1110 ->反码为 1001 ->补码为 1010
补码的补码是原码
算术操作符
- 将负数赋值给reg或其他无符号变量使用二进制补码
- 如果操作数的某一位是
x或z,则结果为x
逻辑操作符
- 如果操作数的任意一位为
x或z,则其等价于逻辑不确定x - 如果操作数全为
0,其逻辑值为0 - 如果操作数有一位为
1,其逻辑值为1
reg a = 4'b0011; //逻辑值为 1
reg b = 4'b10xz; //逻辑值为 1
reg c = 4'b0z0x; //逻辑值为 x
根据这个例子,1的优先级更高
移位操作符
在Verilog中,移位操作符有两种,逻辑操作符>>和算术操作符>>>
- 无符号数:算术右移和逻辑右移没有区别,都是左侧补
0 - 有符号数
- 逻辑右移,左侧补
0 - 算术右移,符号为1则补
1,符号为0则补0
- 逻辑右移,左侧补
本文详细讲解了有符号数的原码和补码概念,重点阐述了正负数的补码运算规则,并展示了如何在Verilog中进行数值存储和算术逻辑操作,包括移位操作的有无符号区别。通过实例解析,帮助读者掌握补码在编程中的实际运用。
2289

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



