&nb

计算机中只有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++)

            ;//不是无限循环的函数

相关文章
相关标签/搜索