在计算机内,定点数有3种表示法:原码、反码和补码
byte在内存中一个字节,占八个位,最高位为符号位,那么他取值范围为:
10000000~01111111;
注意:并不是11111111~01111111;因为11111111表示-1,是负数中最大的数。
接下来的问题就简单了,我们只要求出10000000的值就真相大白了。
首先,我们可以肯定10000000是个负数,而负数的补码是这样定义的:
该负数的绝对值的补码按位取反,然后对整个数加1。
假设 X:10000000
|x|的补码的反码:10000000 — 1 = 011111111 ; |x|的补码为:
10000000(01111111的反码), 也就是|x|与x的补码相同,都是10000000;这种情况跟 -0和0的补码(同为00000000)是一样的。
毫无疑问10000000就是128,|x| = 128,那x当然就是-128了。
不太明白,谁给我讲一下
qq;531990906菱歌一曲
baiduhi:菱歌一曲
附:
原码------- 最高位为符号位,“0”正,“1”负,其余位表示数值大小。
反码--------正数的反码 与其原码相同;
负数的反码 符号位为“1”原码逐位取反.
补码--------正数的补码 与其原码相同;
负数的补码 反码的末位加1
原码 ;
符号位 数值位
[+7]原= 0 0000111 B
[-7]原= 1 0000111 B
数0的原码有两种形式:
[+0]原=00000000B
[-0]原=10000000B
反码:
符号位 数值位
[+7]反= 0 0000111 B
[-7]反= 1 1111000 B
. 数0的反码也有两种形式
[+0]反=00000000B
[- 0]反=11111111B
时钟是以12进制进行计数循环的,即以12为模。
12+2=14-12=2(从12点顺时针拨2格)
0-10=-10=12=2(从0点逆时针拨10格)
2者处于同一
对于一个模数为12的循环系统来说,加2和减10的效果是一样的;因此,在以12为模的系统中,凡是减10的运算都可以用加2来代替,这就把减法问题转化成加法问题了
同理,计算机的运算部件与寄存器都有一定字长的限制(假设字长为8),因此它的运算也是一种模运算。当计数器计满8位也就是256个数后会产生溢出,又从头开始计数。产生溢出的量就是计数器的模,显然,8位二进制数,它的模数为28=256。
在计算中,两个互补的数称为“补码”。
符号位 数值位
[+7]补= 0 0000111 B
[-7]补= 1 1111001 B
数值0的补码只有一个,即 [0]补=00000000B。