原码补码源码
① 原码,反码,补码和移码: 原码:1001101,反码,补码,移码各是多少
解:首位数字表示正负不做变(1为负数,0为正数)
反码:1110010(正数反码等于原数,题中为负数,则除首位数对应取反)
补码:1110011(得出反码数基础上末位加一)
移码:0110011(补码符号位第一位数字取反)
反码是数值存储的一种,多应用于系统环境设置,如linux平台的目录和文件的默认权限的设置umask,就是使用反码原理。
补码(2's complement)是一种用二进制表示有号数的方法,也是一种将数字的正负号变号的方式。
移码(又叫增码)是符号位取反的补码,一般用指数的移码减去1来做浮点数的阶码,引入的目的是为了保证浮点数的机器零为全0。
(1)原码补码源码扩展阅读
补码的设计目的是:
1.使符号位能与有效值部分一起参加运算,从而简化运算规则.
2.使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计 所有这些转换都是在计算机的最底层进行的,而在我们使用的汇编、C等其他高级语言中使用的都是原码。
小数和分数的补码:
1.十进制分数补码可以先将分子和分母分别表示成二进制数,然后计算出二进制小数,再按下面第三步的方法将求出小数的补码形式。
2.十进制小数的补码也应该先将其转换成二进制小数,再按下面第三步的方法将求出小数的补码形式。
② 原码和补码是什么意思
原码,没有任何意义。
补码具有:用正数代替负数,把减法变成加法运算的功能。
这样,计算机中,只需用一个加法器,便可进行加减运算了。
所以,在计算机中,只是使用补码。根本就不用原码和反码。
对于钟表,倒拨 4 小时,可用正拨 8 小时代替。
对于十进制数,减一,可以用 +99 代替。
比如:24-1 = 23
24 + 99 = (1) 23
忽略进位,只取低两位,结果就是相同的。
这里用来代替负数的正数,就叫做“补数”。
计算机用二进制,就叫做“补码”。
正数,直接运算即可,不用求补码。
负数的补码是:模+该负数。
八位二进制的模是:2 的 8 次方=256。
-1 的补码,就是:256-1 =255 = 1111 1111(二进制)。
-2 的补码,就是:256-2 =254 = 1111 1110(二进制)。
。。。。。。
-128 的补码,就是:256-128 =128 = 1000 0000(二进制)。
求补码,用公式就可得出,并不需要绕道原码反码符号位。
③ 怎么求一个负数的原码和补码
补码,来自于:补数。
一般的常识:
钟表时针,倒拨 3 小时,可以用“正拨 9 小时”来代替。
同理,分针 倒拨 X 分,可以用 正拨 60-X 代替。
60 是分针的周期。
十进制数,两位:0~99,周期就是一百。
-1 可以用 +99 代替。
如:25 - 1 = 24
25 + 99 = (1) 24
忽略进位 1 百,结果就是相同的。
那么,-1 的补数,就是 99 。
-2 的补数,就是 98 。
-X 的补数,就是【 周期 + 该负数 】。
--------
借助于补数,就可以用加法,代替减法运算。
所以,计算机就可以节省硬件了。
--------
八位二进制:0000 0000~1111 1111(0~255)。
周期是 256。
那么,-1 可以用 1111 1111 (+255) 代替。
即:
-1 的补码,就是 1111 1111 (= 256-1=+255) 。
-2 的补码,就是 1111 1110 (= 256-2=+254) 。
。。。
-X 的补码,就是【 周期 + 该负数 】。
-128,就可以用 1000 0000 (= 128)代替 。
正数,不需要变换,直接运算即可。
--------
在计算机中,负数,就是用补码存储、计算的。
原码和反码,毫无用处,它们在计算机中都不存在。
④ 什么是源码,反码,补码
这三个都是二进制数,如果源码是正的,那么反码,补码都是和源码是一样的,如果源码是负的话,其中最高位是符号位,1表示负,0表示正。比如-15,它的源码是10001111,反码就是把源码的0和1互换位置,其中符号位不变。-15的反码是11110000,补码就是在反码的基础上末尾加1就行了
⑤ 计算机的原码,反码,补码是怎么回事可以举例说明吗
原码、反码和补码是计算机中对数字二进制的三种表示方法。
1、原码
原码(true form)是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种表示:+0和-0),其余位表示数值的大小。
例如:用8位二进制表示一个数,+11的原码为00001011,-11的原码就是10001011。
2、反码
反码是数值存储的一种,多应用于系统环境设置,如linux平台的目录和文件的默认权限的设置umask,就是使用反码原理。反码的表示方法是:正数的反码与其原码相同;负数的反码是对正数逐位取反,符号位保持为1。
例如:
[+7]反= 0 0000111 B;
[-7]反= 1 1111000 B。
3、补码
正数:正数的补码和原码相同。负数:负数的补码则是符号位为“1”。并且,这个“1”既是符号位,也是数值位。数值部分按位取反后再在末位(最低位)加1。也就是“反码+1”。
例如:
[+7]补= 0 0000111 B;
[-7]补= 1 1111001 B。
(5)原码补码源码扩展阅读
原码、反码、补码的转换方法如下:
(1) 已知原码,求补码。
例:已知某数X的原码为10110100B,试求X的补码和反码。
首先通过原码的首位确定该数字的正负,若为正数,反码与原码相同,补码比原码在末尾加1;若为负数,求其反码时,符号位不变,数值部分按位求反;求其补码时,再在其反码的末位加1。
(2)已知补码,求原码。
按照求负数补码的逆过程,数值部分应是最低位减1,然后取反。但是对二进制数来说,先减1后取反和先取反后加1得到的结果是一样的,故仍可采用取反加1的方法。
⑥ 十进制的原码、补码
十进制-67的原码是01000011、反码是10111100和补码是10111101。
转换规则:
1、负整数的原码为二进制前面加符号位;
-67=1000011(二进制)=11000011(原码)
2、负整数的反码=原码各位取反(除了符号位外);
11000011(原码)=10111100(反码)
3、负整数的补码=负整数的反码+00000001;
10111100(反码)=10111101(补码)
(6)原码补码源码扩展阅读:
已知一个数的补码,求原码的操作其实就是对该补码再求补码:
⑴如果补码的符号位为“0”,表示是一个正数,其原码就是补码。
⑵如果补码的符号位为“1”,表示是一个负数,那么求给定的这个补码的补码就是要求的原码。
例:已知一个补码为11111001,则原码是10000111(-7)。
因为符号位为“1”,表示是一个负数,所以该位不变,仍为“1”。
其余七位1111001取反后为0000110;再加1,所以是10000111。
⑦ 原码、补码、反码之间是怎样转换的
正数的原码、反码、补码是一致的。(例如:2的原码:0000 0010,那么其反码和补码都是0000 0010)
负数的反码顾名思义,是除了符号位与原码一致,其余位都与原码相反。(例如:-2的原码是1000 0010,那么其反码是1111 1101),负数的补码则是在其反码的基础上加1。(例如:-2的反码是1111 1110)
1、首先,数字除了我们平时最长使用的十进制数外,还有二进制,八进制,十六进制等。这里我们的原码,补码,反码之间转换指的是二进制数。如下。
⑧ 计算机内部如何存储数据,关于源码、补码的问题!
源码,反码,补码是计算机原理的术语。说白了就是为了理解计算机2进制用的。对于C/C++来说,是和数据类型有关的。整型(包括
char
,short,
int,
long)都是用补码方式表示有符号数的。
无符号数是使用源码方式表示的。float和double类型是使用阶码移码方式存储数据的。
计算机内部是2进制存储的,吧一个存储看作一定类型的数据,就对应着这种类型的计算。
如果没有类型作为依托,你的假设就不成立了,所以不能说它到底表示是几。
如果是整型类型,因为第一个位是0,所以不论有符合还是无符号,它都是一个正数;那么可以认为它表示十进制数字18
⑨ 已知某数的二进制原码 怎么算他的反码和补码怎么算
首先你得区分这个二进制书是带符号位的还是不带符号位的。
不带符号位的:反码就是将其原码按位取反,比如“1000”反码:“0111”;补码是其本身。
带符号位的:反码就是其符号位不变,其他位按位取反。比如“10000000”
反码:“11111111”;补码就是反码再加一。反码“11111111”
补码“10000000”。
⑩ 计算机源码,反码,补码之间怎么计算
转换方法:
如果是正数或零,则首位为 0,补码=原码=反码。
否则,首位为 1,数值位取反加一,即可实现“补码与原码”互换。
例如:
对 1111 1001 取反,为 1000 0110,再加一,得:1000 0111。
对 1000 0111 取反,为 1111 1000,再加一,得:1111 1001。
这说明,补码 ←→ 原码,方法是相同的。