https://blog.csdn.net/maxwell2ic/article/details/80596210
定点数
原码表示
MSB是符号位,0表示正数,1表示负数。
D=(−1)aB−1∑i=0B−2ai2i−B+1
D=(−1)aB−1∑i=0B−2ai2i−B+1
比如,二进制0.110=(−1)0∗(1∗2−1+1∗2−2)=+0.750.110=(−1)0∗(1∗2−1+1∗2−2)=+0.75,1.110=(−1)1∗(1∗2−1+1∗2−2)=−0.751.110=(−1)1∗(1∗2−1+1∗2−2)=−0.75
反码表示(1’s complement)
正数的反码与原码相同,负数的反码是原码除符号位的所有位取反。
补码表示(2’s complement)
正数的原码、反码、补码相同;负数的补码等于反码加1,负数的原码与补码之间的相互转化关系均为除了符号位取反再加1。
补码的好处在于加减运算不需要判断符号位。B-A=B+(-A),-A的补码是A的补码所有位取反再加1
三种数制之间转换关系
正数原码、反码、补码相同;
负数补码为原码除符号位取反加1;
相反数数补码转换为所有位取反加1.
verilog中的常量类型
verilog中常量编译为二进制,均为补码(整数与原码相同,负数为除符号为取反加1)
在verilog中声明端口或者信号时,默认是无符号数,
wire [7:0] number;
reg [7:0] number;
1
2
转换为十进制为
D=∑i=0B−1ai2i
D=∑i=0B−1ai2i
如果需要指定为有符号数,需要特殊声明,则在硬件底层的二进制数均为补码形式
wire signed [7:0] number;
reg signed [7:0] number;
1
2
转换为十进制为
D=∑i=0B−1ai2i−2B×aB−1
D=∑i=0B−1ai2i−2B×aB−1
在verilog2001中可以特别地用’s来声明符号数,比如-4表示成一个3bit十六进制数位-3’sh4。
十进制的数永远都是有符号数.