1楼:匿名用户
题目说的很清楚,变号。
0110 1101 是正数,它变成负数 则为 1110 1101(原码),而负数是用补码表示的,所以要求其反码:1001 0010,再加1得补码:1001 0011
二进制数的补码是什么意思?
2楼:匿名用户
二进制补码 数值在计算机中表示形式为机器数,计算机只能识别0和1,使用的是二进制,而在日常生活中人们使用的是十进制,"正如亚里士多德早就指出的那样,今天十进制的广泛采用,只不过我们绝大多数人生来具有10个手指头这个解剖学事实的结果.尽管在历史上手指计数(5,10进制)的实践要比二或三进制计数出现的晚."(摘自《数学发展史》有空大家可以看看哦~,很有意思的).
为了能方便的与二进制转换,就使用了十六进制(2 4)和八进制
1.数值有正负之分,计算机就用一个数的最高位存放符号(0为正,1为负).这就是机器数的原码了.假设机器能处理的位数为8.即字长为1byte,原码能表示数值的范围为
(-127~-0 +0~127)共256个.
i.有了数值的表示方法就可以对数进行算术运算.但是很快就发现用带符号位的原码进行乘除运算时结果正确,而在加减运算的时候就出现了问题,如下: 假设字长为8bits
( 1 )10- ( 1 )10= ( 1 )10+ ( -1 )10= ( 0 )10
(00000001)原+ (10000001)原= (10000010)原= ( -2 )显然不正确.
ii.因为在两个整数的加法运算中是没有问题的,于是就发现问题出现在带符号位的负数身上,对除符号位外的其余各位逐位取反就产生了反码.反码的取值空间和原码相同且一一对应.
下面是反码的减法运算:
( 1 )10-( 1 )10= ( 1 )10+ ( -1 )10= ( 0 )10
(00000001)反+ (11111110)反= (11111111)反= ( -0 ) 有问题.
( 1 )10- ( 2)10= ( 1 )10+ ( -2 )10= ( -1 )10
(00000001)反+ (11111101)反= (11111110)反= ( -1 )正确
问题出现在(+0)和(-0)上,在人们的计算概念中零是没有正负之分的.(印度人首先将零作为标记并放入运算之中,包含有零号的印度数学和十进制计数对人类文明的贡献极大).
于是就引入了补码概念. 负数的补码就是对反码加一,而正数不变,正数的原码反码补码是一样的.在补码中用(-128)代替了(-0),所以补码的表示范围为:
(-128~0~127)共256个.
注意:(-128)没有相对应的原码和反码, (-128) = (10000000) 补码的加减运算如下:
( 1 )10- ( 1 )10= ( 1 )10+ ( -1 )10= ( 0 )10
(00000001)补+ (11111111)补= (00000000)补= ( 0 )正确
( 1 )10- ( 2)10= ( 1 )10+ ( -2 )10= ( -1 )10
(00000001)补+ (11111110)补= (11111111)补= ( -1 ) 正确
所以补码的设计目的是:
⑴使符号位能与有效值部分一起参加运算,从而简化运算规则.
⑵使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计
所有这些转换都是在计算机的最底层进行的,而在我们使用的汇编、c等其他高级语言中使用的都是原码。看了上面这些大家应该对原码、反码、补码有了新的认识了吧!
3楼:做而论道
----
日常生活中,大家都知道,把时针倒拨20分钟,和正拨40分钟,效果是相同的。
-20,就对应了 +40。
怎么算的?用 60 减去 -20 的绝对值,即可。
----
另外,100 以内的数字,减去1,和加上 99,效果也是相同的。
比如,27 - 1 = 26, 27 + 99 = (1) 26。
即 -1,就对应了 +99。
怎么算的?用 100 减去 -1 的绝对值,即可。
----
这些,就体现了《模》与《补数》的概念。
利用补数,就可把减法,转换成加法。如果是正数,直接做加法就行,不用费事。
----
对于负数,要用《模》减去这个负数的绝对值,求出《补数》之后再用于计算。
对于正数,就不用变了。
----
八位二进制数字的《模》是 1 0000 0000,即 256。
-5 的补数就是:256 - 5 = 251。
----
把 5、251,都写成二进制数,这就称为了《码》,此时就可以看出它们有《求反加一》的关系。
即把 5 = 0000 0101,求反加一,就有:1111 1011,这就是 -5 的补码,这也就是 251。
----
八位时,补码定义式如下:
[x]补 = x ;0 =< x =< 127
[x]补 = 256 - | x | ;128 =< x < 0
严谨一些的书上都有这个式子。
----
补码完全可以用十进制数表示,编程时,就写十进制数,保证都是正确的。
补码,不必变成二进制,也就不用《求反加一》了,书上讲的那些步骤,都是垃圾。
----
补码理论,适用于任何的进制。
只有二进制,才被搞计算机的,硬是瞎编出来一个符号位,然后还说,符号位也参加运算。
他们就是敢于自己打自己的嘴巴。
----
可以想像一下,有个小孩子,很小,不很识数,只认识 0 ~ 99,还不会做减法。
教这样的小孩做减法,就可以告诉他:-1,可以用+99来代替。
24 - 1 = 23
24 + 99 = (1)23
忽略进位,是不是就是一样的?
那么,98,就是-2;
97,就是 -3;
……50,就是 -50。
看明白这些,就可以理解了《补码定义式》。
--对于八位的二进制数,是 0 ~ 1111 1111(255);
255,就是 -1;
254,就是 -2;
……128,就是-128。
这就是按照《补码定义式》,求出来的《负数的补码》。
而 0~127,按照《补码定义式》,就是《正数的补码》。
--128 ~ 255,其二进制数的最高位是1,这就被他们吹嘘成了符号位。
50~99,是在十进制数里面,也是代表负数的,他们就没有说的了。
补码理论,适用于任何的进制。你可以自己归纳出来。
比如,反转 90 度,可以用正转 270 度代替。270,有符号位吗?
钟表,倒拨 20 分,可以用正拨 40 分代替。40,有符号位吗?
符号位,是根本就不存在的。
补码,有个定义式,按照定义求补码,根本就不涉及原码、反码,也没有什么符号位。
4楼:银色黎明远征者
http://baike.baidu.***/view/1809209.htm
自己看吧
所谓“变号操作”是指将一个整数变成绝对值相同但符号相反的另一个整数。 10
5楼:匿名用户
0和1互换,最后结果+1
11000101
00111010+1=00111011
注意11000101+
00111011刚好数据溢出
所谓变号操作是指将一个整数变成绝对值相同但符号相反的另一个整数。假设使用补码表示的8位整数x=10010101
6楼:匿名用户
x=10010101
首先将x中的二进制数全部更换,即y=01101010,也就是把原来的0换成1,原来的1换成0.
然后,把y加1,即结果z=y+1=01101011.
为什么要加1呢?举个最简单的例子,按照变号操作,“0”变号操作以后应该还是“0”,对吧。但是如果我们把“0”的二进制数更换以后,会发生什么呢?
a=00000000,更换后b=11111111这样“0”就变成“-127”了,因为最左边的那一位二进制数是符号位(0代表正数,1代表负数),这样就会出问题,因此需要再加1,使得结果c=b+1=00000000
87+(-73)表示成二进制补码,然后按补码进行运算,麻烦帮我这下过程,看看结果是否溢出 80
7楼:可轩
若字长8位,则:
[-73]原 =11001001b
[-73]反 =10110110b
.[-73]补 =10110111b
[87]补 =01010111b (+
------------------------------[87-73]补=00001110b 最高位(符号位)进位自然丢失结果 87+(-73) =+1110b =+14dcs⊕cp = 1⊕1 = 0 无溢出,(cs是符号位的进位,cp是最高数值位的进位,⊕表示异或)
二进制补码怎么计算的
8楼:guxuecan剑
1、正数的补码表示:
正数的补码 = 原码
负数的补码 = + or
= +
以十进制整数+97和-97为例:
+97原码 = 0110_0001b
+97补码 = 0110_0001b
-97原码 = 1110_0001b
-97补码 = 1001_1111b
2、纯小数的原码:
纯小数的原码如何得到呢?方法有很多,在这里提供一种较为便于笔算的方法。
以0.64为例,通过查阅可知其原码为0.1010_0011_1101_0111b。
操作方法:
将0.64 * 2^n 得到x,其中n为预保留的小数点后位数(即认为n为小数之后的小数不重要),x为乘法结果的整数部分。
此处将n取16,得
x = 41943d = 1010_0011_1101_0111b
即0.64的二进制表示在左移了16位后为1010_0011_1101_0111b,因此可以认为0.64d =0.1010_0011_1101_0111b 与查询结果一致。
再实验n取12,得
x = 2621d = 1010_0011_1101b 即0.64d =0.1010_0011_1101b,在忽略12位小数之后的位数情况下,计算结果相同。
3、纯小数的补码:
纯小数的补码遵循的规则是:在得到小数的源码后,小数点前1位表示符号,从最低(右)位起,找到第一个“1”照写,之后“见1写0,见0写1”。
以-0.64为例,其原码为1.1010_0011_1101_0111b
则补码为:1.0101_1100_0010_1001b
当然在硬件语言如verilog中二进制表示时不可能带有小数点(事实上不知道**可以带小数点)。
4、一般带小数的补码
一般来说这种情况下先转为整数运算比较方便
-97.64为例,经查询其原码为1110_0001.1010_0011_1101_0111b
笔算过程:
-97.64 * 2^16 = -6398935 =1110_0001_1010_0011_1101_0111b,其中小数点在右数第16位,与查询结果一致。
则其补码为1001_1110_0101_1100_0010_1001b,在此采用负数的补码 = + 方法
5、补码得到原码:
方法:符号位不动,幅度值取反+1or符号位不动,幅度值-1取反
-97.64补码 =1001_1110(.)0101_1100_0010_1001b
取反 =1110_0001(.)1010_0011_1101_0110b
+1 =1110_0001(.)1010_0011_1101_0111b 与查询结果一致
6、补码的拓展:
在运算时必要时要对二进制补码进行数位拓展,此时应将符号位向前拓展。
-5补码 = 4'b1011 = 6'b11_1011
ps.原码的拓展是将符号位提到最前面,然后在拓展位上部0.
-5原码 = 4‘b’1101 = 6'b10_0101,对其求补码得6'b11_1011,与上文一致。
长度为节的二进制整数,采用补码表示,且由1和0组
1楼 做而论道 1 由5个1和3个0组成,可以表示的最小十进制整数 8 因为二进制数 1 111 1000 左边的1,代表负号 其余7位,求反加一,是绝对值的原码 8。 即 1 111 1000 8。 2 由4个1和4个0组成,可以表示的最大十进制整数 120 因为二进制数 0 111 1000 左...
计算机基础长度为字节的二进制整数,若采用补码表示,且由
1楼 可轩 最小整数 绝对值最大负数 x 补 1000 0111b x 反 1000 0110b x 原 1111 1001b x 111 1001b 121d 长度为1个字节的二进制整数 若采用补码表示 且由4个 1 和4个 0 组成 则可表示的最小整数为多少 2楼 亚平宁的恶来 补码 1000 ...