计算机中只有0和1,在这种条件约束下,只能表达正整数和0;ide
字长:计算机cpu的性能指标,指cpu一次能够加工,处理的二进制位数。函数
定长:计算机在表示信息的时候,采用固定的二进制位数,这个二进制位数叫作定长。性能
在n位定长的约束下,计算机表示的数值范围为[0,2^n)it
在n位定长下,存在如下的等式class
2^n = 0
基础
原码:循环
为了可以表示负数,引入原码二进制
原码在N位定长的基础上,引入最高位表示正负,其中1表示负,0表示正数。总结
n位原码的取值范围为(-2^(n-1),2^(n-1))cpu
当n为8时,为[-127,+127]
计算机中没有原码
补码:
在计算机中存在两大运算:逻辑运算和算术运算
逻辑运算:或,与,非,异或
A B A&&B A||B A^B
0 1 0 1 1
1 1 1 1 0
1 0 0 1 1
1 1 1 1 0
算术运算:
A B A+B
0 1 01
1 1 10
1 0 01
0 1 01
总结:进位等于A&&B
本位等于A^B
因为减法电路中存在借位,没法用简单的电路实现,因此引入补码
补码的定义:
如表示正数,则原码等于补码
如表示负数,则在原码的基础上,除符号位外,各位取反而后末位加1
在定长为8的时,-8的原码:
1000 1000
因此根据定义其补码为:
1111 1000
(x + y)的补码 = x的补码 + y的补码
n位补码表示的范围:[-2^(n-1),2^(n-1))
n位补码比n位原码多表示一位数的缘由:
在原码表示0的时候 0000 0000表示0 1000 0000表示0,
上述两个原码对应同一个补码,因此原码比补码少一个数
补码存在一个问题
以8位定长来讲,它的补码范围[-127,127)
127+1 == -127
如上式,补码的大小有范围且相互链接
int i;
for(i = 1; i > 0; i++)
;//不是无限循环的函数