1楼:你猜我猜哇擦猜
负数以其正数的补码形式表达.
原码:一个整数,按照绝对值大小转换成的二进制数,称为原码.
比如 01111011是 123 的 原码.
反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码.
取反操作指:原为1,得0;原为0,得1.(1变0; 0变1)比如:将01111011每一位取反,得10000100反码是相互的,所以也可称:
补码:补码:反码加1称为补码,补码:10000101.
求一个十进制数的 (原码 补码 反码 移码 ) 用一个字节表示??
2楼:做而论道
一个字节表示是什么意思??
就是用 8 位二进制数表示。
8 位二进制数的原码,可以表示十进制数:-127~+127。 如 3 的原码:0000 0011。
8 位二进制数的反码,可以表示十进制数:-127~+127。 如 3 的反码:0000 0011。
8 位二进制数的补码,可以表示十进制数:-128~+127。 如 3 的补码:0000 0011。
8 位二进制数的移码,可以表示十进制数:-128~+127。 如 3 的移码:1000 0011。
假设用一个字节表示有符号整数,试求出十进制数-86的原码,反码和补码
3楼:可轩
若字长8位,则:
[-86]原 =11010110b
[-86]反 =10101001b
[-86]补 =10101010b
一个数的原码,反码,补码怎么算
4楼:匿名用户
数在计算机中是以二进制形式表示的。
数分为有符号数和无符号数。
原码、反码、补码都是有符号定点数的表示方法。
一个有符号定点数的最高位为符号位,0是正,1是副。
以下都以8位整数为例,
原码就是这个数本身的二进制形式。
例如0000001 就是+1
1000001 就是-1
正数的反码和补码都是和原码相同。
负数的反码是将其原码除符号位之外的各位求反
[-3]反=[10000011]反=11111100
负数的补码是将其原码除符号位之外的各位求反之后在末位再加1。
[-3]补=[10000011]补=11111101
一个数和它的补码是可逆的。
为什么要设立补码呢?
第一是为了能让计算机执行减法:
[a-b]补=a补+(-b)补
第二个原因是为了统一正0和负0
正零:00000000
负零:10000000
这两个数其实都是0,但他们的原码却有不同的表示。
但是他们的补码是一样的,都是00000000
特别注意,如果+1之后有进位的,要一直往前进位,包括符号位!(这和反码是不同的!)
[10000000]补
=[10000000]反+1
=11111111+1
=(1)00000000
=00000000(最高位溢出了,符号位变成了0)
有人会问
10000000这个补码表示的哪个数的补码呢?
其实这是一个规定,这个数表示的是-128
所以n位补码能表示的范围是
-2^(n-1)到2^(n-1)-1
比n位原码能表示的数多一个
又例:1011
原码:01011
反码:01011 //正数时,反码=原码
补码:01011 //正数时,补码=原码
-1011
原码:11011
反码:10100 //负数时,反码为原码取反
补码:10101 //负数时,补码为原码取反+1
0.1101
原码:0.1101
反码:0.1101 //正数时,反码=原码
补码:0.1101 //正数时,补码=原码
-0.1101
原码:1.1101
反码:1.0010 //负数时,反码为原码取反
补码:1.0011 //负数时,补码为原码取反+1
总结:在计算机内,定点数有3种表示法:原码、反码和补码
所谓原码就是前面所介绍的二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。
1、原码、反码和补码的表示方法
(1) 原码:在数值前直接加一符号位的表示法。
例如: 符号位 数值位
[+7]原= 0 0000111 b
[-7]原= 1 0000111 b
注意:a. 数0的原码有两种形式:
[+0]原=00000000b [-0]原=10000000b
b. 8位二进制原码的表示范围:-127~+127
2)反码:
正数:正数的反码与原码相同。
负数:负数的反码,符号位为“1”,数值部分按位取反。
例如: 符号位 数值位
[+7]反= 0 0000111 b
[-7]反= 1 1111000 b
注意:a. 数0的反码也有两种形式,即
[+0]反=00000000b
[- 0]反=11111111b
b. 8位二进制反码的表示范围:-127~+127
3)补码的表示方法
1)模的概念:把一个计量单位称之为模或模数。例如,时钟是以12进制进行计数循环的,即以12为模。
在时钟上,时针加上(正拨)12的整数位或减去(反拨)12的整数位,时针的位置不变。14点钟在舍去模12后,成为(下午)2点钟(14=14-12=2)。从0点出发逆时针拨10格即减去10小时,也可看成从0点出发顺时针拨2格(加上2小时),即2点(0-10=-10=-10+12=2)。
因此,在模12的前提下,-10可映射为+2。由此可见,对于一个模数为12的循环系统来说,加2和减10的效果是一样的;因此,在以12为模的系统中,凡是减10的运算都可以用加2来代替,这就把减法问题转化成加法问题了(注:计算机的硬件结构中只有加法器,所以大部分的运算都必须最终转换为加法)。
10和2对模12而言互为补数。
同理,计算机的运算部件与寄存器都有一定字长的限制(假设字长为8),因此它的运算也是一种模运算。当计数器计满8位也就是256个数后会产生溢出,又从头开始计数。产生溢出的量就是计数器的模,显然,8位二进制数,它的模数为28=256。
在计算中,两个互补的数称为“补码”。
2)补码的表示: 正数:正数的补码和原码相同。
负数:负数的补码则是符号位为“1”,数值部分按位取反后再在末位(最低位)加1。也就是“反码+1”。
例如: 符号位 数值位
[+7]补= 0 0000111 b
[-7]补= 1 1111001 b
补码在微型机中是一种重要的编码形式,请注意:
a.采用补码后,可以方便地将减法运算转化成加法运算,运算过程得到简化。正数的补码即是它所表示的数的真值,而负数的补码的数值部份却不是它所表示的数的真值。
采用补码进行运算,所得结果仍为补码。
b.与原码、反码不同,数值0的补码只有一个,即 [0]补=00000000b。
c.若字长为8位,则补码所表示的范围为-128~+127;进行补码运算时,应注意所得结果不应超过补码所能表示数的范围。
5楼:湖海散人
首先,机器数是有上限的,以8位数为例,只有256个数可以处理,即00000000到11111111
如果只考虑自然数,那么00000000~11111111对应0~255,就是二进制表示。但是有的时候需要负数,怎么办呢?科学家想到,这256个数可以分成2组,让0开头的表示正数和0,1开头的表示负数。
所以00000000~01111111依然对应0~127,但是10000000~11111111本该对应-0~-127, 0和-0是一回事,于是把-0当做-128 。这样就用00000000~11111111表示了-128~127 。这就是【原码】
补码是为了计算方便而发明的。原始计算器只能做加法不能做减法,但是科学家发现,例如7+(-5)=2可以这样算:7+(-5) = 7+(10000-5)-10000 = 10002 - 10000 = 2 。
这很奇怪,因为机器太傻,只能做加法,但是虽然不会减法,-10000还是很方便的,只要去掉开头的1;用10000减也是很方便的,因为可以用9999减然后+1,而用9999减,只要把每一位用9减。这就弥补了不能做减法的不足。以10000为基准,我们说-5的补码是9995,因为它们加上7后,一个是2,一个是10002,只相差一个最高位(有趣的是,计算机计算高位会溢出,比如对于8位计算,256或更大的数需要超过8位来表示,会因放不下被舍去,结果就完全相同了)。
均衡正负,补码也是用00000000~11111111表示-128~127,正数部分照旧,但是用11111111表示-1,11111110表示-2,以此类推到-128,因为7+(-2)=5,7+11111110(即254)等于231,二进制表示要9位:100000101,舍去第一位为00000101,就是5 。这就是【补码】
反码是为了方便计算补码,提出的称呼。十进制每一位取反不就是用9999减么?二进制就是用11111111减,等价于取反(因为只有2个数字,而十进制有10个)。
对于-128到0之间的数,比如-5,即-00000101,按位取反即可。但是原码是把第一位当成符号的,所以你可以先写成【自然二进制表示】,然后全部取反。之所以有反码,是因为反码很好算(按位取反),然后+1就是补码,因此充当了一个中间角色。
原码好看,补码好用,反码是中间步骤。
6楼:幻形术
原码:就是常规的二进制数编码。其中,有符号整数时二进制最高位表示符号位,0为正,1为负;无符号整数时所有位都用来表示数值。
以下都以1个字节8bit的数为例,如果用1个字节表示无符号数,那么255的原码就是11111111, 127的原码就是01111111,显示表示范围是0~255共256个数;
如果用1字节8bit表示有符号整数,那么最高位表示符号位,低7位表示数值,显示255越界了表示不了,-127的原码就是11111111,正127的原码是01111111,也即表示范围是-127~127共255个数,其中有正0和负0两种方法表示0.。
有了原码的认识之后,再来看反码和补码:
正整数的反码、补码跟原码一样,当然如果是无符号整数,也就无所谓什么码了,因为都是一样的。
那么问题就在于有符号整数里的负数了:
负数的反码:就是在原码的基础上,符号位不变,其余位对应取反,也是0变为1,1变为0. 比如-1,原码是10000001,那么反码就是11111110.
再来负数的补码:在反码的基础上,加1。所以-1的补码就是11111111了。
为什么会有反码补码的概念?为什么说计算机里的整数都是存的补码而不是原码?
反码的作用只是为了引出补码,关键就是补码的存在,实际上就是为了方便计算机里的负数加法或者说叫减法运算,有了补码后,负数运算也变成正数运算了,减法运算也变成加法运算了。
再来细看-1的补码11111111,其实就是无符号整数255,显然对于1字节来说,11111111 + 00000001后即溢出变为0,正好,-1+1后也是0,255+1后溢出也是0.
也即是说int8_t类型的-1与uint8_t的255是在二进制层面上相等的,当你用==去判断的时候结果为真。当你对一个uint8_t类型的变量赋值为-1时,它的值实际就是255.
于是负数补码从另一个概念上讲,实际上就是如果某个二进制码加上该负数绝对值之后等于0了,那么该二进制码就是该负数的补码。11111111 + 1后为0了,那么11111111就是-1的补码,同理,11111110是-2的的补码。
而对于short、int、long类型的量,类似,自己类推。
计算机基础长度为字节的二进制整数,若采用补码表示,且由
1楼 可轩 最小整数 绝对值最大负数 x 补 1000 0111b x 反 1000 0110b x 原 1111 1001b x 111 1001b 121d 长度为1个字节的二进制整数 若采用补码表示 且由4个 1 和4个 0 组成 则可表示的最小整数为多少 2楼 亚平宁的恶来 补码 1000 ...
长度为节的二进制整数,采用补码表示,且由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楼 匿名用户 不用字母 16进制才需要 1 9 a f 2楼 匿名用户 用o,如果用大写的o容易跟0混 二进制 十进制 八进制 十六进制 各代表的英文字母是什么 3楼 西丶毒毒毒毒毒 二进制是binary,简写为b。 八进制是octal,简写为o。 十进制为decimal,简写为d。 十六进制为h...