赞
踩
===================================================================================== 1、正数的反码和补码都与原码相同。 2、而负数的反码为对该数的原码除符号位外各位取反。 3、负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1 1、原码表示法规定:用符号位和数值表示带符号数,正数的符号位用“0”表示,负数的符号位用“1”表示,数值部分用 二进制形式表示。 2、反码表示法规定:正数的反码与原码相同,负数的反码为对该数的原码除符号位外各位取反。 3、补码表示法规定:正数的补码与原码相同,负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1. 4、正零和负零的补码相同,[+0]补=[-0]补=0000 0000B。 计算机中数值都是以补码的形式存储 ====================================================================================== 真值 原码 || 反码 补码 表示的数值 ====================================================================================== 0 0000_0000 | 0000_0000 0 1 0000_0001 | 0000_0001 1 ... .... | .... ... .... | .... ... .... | .... ... .... | .... ... .... | .... 127 0111_1111 | 0111_1111 127 ===================================================================================== -0 1000_0000 | 1111_1111 1_0000_0000 -128 -1 1000_0001 | 1111_1110 1111_1111 -127 -2 1000_0010 | 1111_1101 1111_1110 -126 ... .... | ... .... | ... .... | -127 1111_1111 | 1000_0000 1000_0001 -1 ===================================================================================== ===================================================================================== 符号位 数值位 1(负数) 7位 0(正数) 7位 特殊:10000000 :-0表示-128 上述的-0位特殊情况,规定它在计算机中的表示的数为-128; -0:10000000按位取反再加1后为1_0000_0000超出了8位,把这个值规定为8位表示的-128; 因此8位二进制数可表示的有符号数为0-255;可表示的无符号数为-128-0-127 ===================================================================================== 在这里要说到一个概念 模,“模”是指一个计量系统的计数范围。如时钟等。 时钟的计量范围是0~11,模=12。表示n位的二进制数计量范围是0~2(n)-1,模=2(n), 八位二进制数的模为2^8 。 任何有模的计量器,均可化减法为加法运算(这就是计算机二进制运算的原理)。假设当前 时针指向10点,而准确时间是6点,调整时间可有以下两种拨法:一种是倒拨4小时,即: 10-4=6;另一种是顺拨8小时:10+8=12+6=6 。在以12模的系统中,加8和减4效果是一样 的,因此凡是减4运算,都可以用加8来代替。对“模”而言,8和4互为补数。实际上以12模的 系统中,11和1,10和2,9和3,7和5,6和6都有这个特性。共同的特点是两者相加等于模。 对于计算机,其概念和方法完全一样。n位计算机,设n=8, 所能表示的最大数是11111111, 若再加1成为100000000(9位),但因只有8位,最高位1自然丢失。又回了00000000, 所以8位二进制系统的模为2^8。在这样的系统中减法问题也可以化成加法问题,只需把减 数用相应的补数表示就可以了,把补数用到计算机对数的处理上,就是补码。 对一个正数的原码取反加一,得到这个正数对应负数的补码。例如~6=-7,而且加一之后 会多出一个八进制补码1000 0000,而这个补码就对应着原码1000 0000,数字位同时当做符号位即-128 。 所以根据以上我们可以理解为什么八位二进制数表示范围为-128~+127。 八位二进制正数的补码范围是0000 0000 ~ 0111 1111 即0 ~ 127,负数的补码范围是正数 的原码0000 0000 ~ 0111 1111 取反加一(也可以理解为负数1000 0000 ~ 1111 1111化为 反码末尾再加一)。 所以得到 1 0000 0000 ~ 1000 0001,1000 0001作为补码,其原码 是1111 1111(-127),依次往前推,可得到-1的补码为1111 1111,那么补码0000 0000 的原码是1000 0000符号位同时也可以看做数字位即表示-128,这也解释了为什么 127(0111 1111)+1(0000 0001)=-128(1000 0000)。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。