数字,存在计算机中,就是“码”。
在计算机中,没有原码和反码。
以八位为例:
数字 0 的存放形式是:0000 0000。
数字+1,就是加上一:0000 0001。
数字+2,就再加上一:0000 0010。
数字+3,就依此类推:0000 0011。
依次加一,即可。
----------
负数,就是依次减一。
数字 0 的存放形式是:0000 0000。
数字-1,就是减一:0000 0000-1,
只保留八位,可得:1111 1111(=255)。
数字-2,就再减一:1111 1110(=254)。
数字-3,继续减一:1111 1101(=253)。
然后你就依次减一吧
----------
以上,是计算机中的补码。
---------
八位补码的表示范围:-128~+127。
八位补码的计算公式:
正数的补码:就是正数本身。
负数的补码:256-该负数。
(如果需要二进制,你就再转换一下。)
---------
补码,完全是由二进制加一减一自然形成的,和原码反码没有任何关系。
计算机中,也没有原码和反码。
所以,原码和反码,都没有任何用处。
八位补码的定义式是:
[X]补码 = 2^8 -| X | // X < 0
假如 X =-1011,推导如下。
[-1011 ] 补码 = 2^8 -| X |
= 1 0000 0000- | -1011 |
= 1 0000 0000 - 0000 1011
= (1111 1111 + 1)-0000 1011
= (1111 1111 - 0000 1011) + 1
//( 括号中就是取反 )之后加一
= 1111 0100 + 1// 反码+1
= 1111 0101//补码
证毕。
除了下限(字长8位的-128、字长16位的-32768、)之外,\x0d\题目的那句话是正确的。\x0d\\x0d\求负数补码可用另一方法:[x]补 =x +模 \x0d\例如,字长8位的模 =2^8 =256\x0d\[-128]补 =(-128) +256 =128 =1000 0000b\x0d\又如,字长16位的模 =2^16 =65536\x0d\[-32768]补 =(-32768) +65536 =32768 =1000 0000 0000 0000b真值 -11d = -1011b , 若字长8位,则:
[-11d]原 =10001011b , 最高位是du符号位,1表示负数,其余为数值位
[-11d]反 =11110100b , 将原码除符号位之外的各位取反得反码
[-11d]补 =11110101b ,将反码末位加1得补码
d是十进制数后缀 , b是二进制数后缀
反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
原码10010= 反码11101 (10010,1为符号码,故为负)
(11101) 二进制= -13 十进制
补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。
扩展资料:
假设当前时针指向8点,而准确时间是6点,调整时间可有以下两种拨法:一种是倒拨2小时,即8-2=6;另一种是顺拨10小时,8+10=12+6=6,即8-2=8+10=8+12-2(mod 12).在12为模的系统里,加10和减2效果是一样的,因此凡是减2运算,都可以用加10来代替。
若用一般公式可表示为:a-b=a-b+mod=a+mod-b。对“模”而言,2和10互为补数。实际上,以12为模的系统中,11和1,8和4,9和3,7和5,6和6都有这个特性,共同的特点是两者相加等于模。
参考资料来源:百度百科-补码
如果人工计算,应该按照减法进行,即:0000 1100 - 1111 0111 = 0001 0101。
但是,CPU中,只有加法器,并没有减法器,遇到减法,CPU就要将减数全部的位,都求反加一,再与被减数相加,就是:
0000 1100 + 0000 1001 = 0001 0101。 和人工计算的结果相同。
注意:这里讲的“减数全部的位,都求反加一”,并不是常说的求“补码”,这是在CPU中自动进行的,无论这个数字,原来是不是补码,只要是做“减法”,CPU都要自动转换,包括最高位。
上述说法,可以参考《计算机组成原理》。
一般常说的求“补码”,是针对负数而言,由人工进行的。
规则是:符号位为1,不要变化,仅仅对后面的数值位,由原码求反加一。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)