1、为什么负数总是比正数多存储一位,eg: 32 位的有符号整数,则其数值范围为 [−2^31, 2^31 − 1]?
简单的说就是0,正0=》00,负0=》10。但是没有必要用2中表示0所以
10000000 =》-128
原则:
1、0表示正,1表示负数;
2、计算机为方便减法计算,在表示负数的时候引入补码机制,将减法变成加法统一运算。那如何运算,负数整数部分取反得到反码,反码+1的到补码。
在计算机系统中,数值一律用补码进行表示和存储。原因在于使用补码可以将符号和数值统一处理,同时加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
补码:正整数的补码是其二进制表示,与原码相同;负整数的补码,将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变)后加1;
反码:正数的反码与其原码相同;负数的反码是对正数逐位取反,符号位保持为1;
2、无符号n比特正数表示的范围是多少
[0, 2^n-1]