首位为符号位(0-正,1-负)
正数的反码和补码都为本身
负数的反码:把原码的符号位保持不变,数值位逐位取反,即可得原码的反码。
负数的补码:在反码的基础上加 1
2 + (-1)= 0010 + (1001) 是不对的,应该是 2 + (-1)的补码,-1(1001)的补码是1111
0010 + 1111 = 0001 结果就是1
负数的补码求原码, 如1111是负数的补码,则原码为符号位不变,减1取反 得1001
//以4位数字为例,其中最高位为符号位,0正1负
1 0001 -1 1001
2 0010 -2 1010
3 0011 -3 1011
4 0100 -4 1100
数据在内存中以补码的形式存放
verilog 中的有符号数以补码形式表示 !!!!
//例 a是4bit有符号数,b是8bit有符号数
a = 4'b1001 // 即 a = -7
b = a;
则b = 8'b1111 1001; // 补码形式,转原码是-7