数据存储补码
源码,反码,补码是计算机原理的术语。说白了就是为了理解计算机2进制用的。对于C/C++来说,是和数据类型有关的。整型(包括
char
,short,
int,
long)都是用补码方式表示有符号数的。
无符号数是使用源码方式表示的。float和double类型是使用阶码移码方式存储数据的。
计算机内部是2进制存储的,吧一个存储看作一定类型的数据,就对应着这种类型的计算。
如果没有类型作为依托,你的假设就不成立了,所以不能说它到底表示是几。
如果是整型类型,因为第一个位是0,所以不论有符合还是无符号,它都是一个正数;那么可以认为它表示十进制数字18
㈡ 正数的补码是什么
正数的补码就是原码本身,负数的补码是其反码加1。
计算机中的有符号数有即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”。在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。
补码:在反码的基础上加1,这样可以方便计算机进行计算,可以让“最高位符号位都能参与计算”。原码:字节的最高位为符号位,其余表示数值大小,最简单;反码:正数的反码和原码一样,负数的反码除最高位符号位外,其他位都取反。
补码
补码“模”概念的引入、负数补码的实质、以及补码和真值之间的关系所揭示的补码符号位所具有的数学特征,无不体现了补码在计算机中表示数值型数据的优势,解决了符号的表示的问题,克服了原码加减法运算繁杂的弊端,可有效简化运算器的设计。
补码表示统一了符号位和数值位,使得符号位可以和数值位一起直接参与运算,这也为后面设计乘法器除法器等运算器件提供了极大的方便。补码概念的引入和当时运算器设计的背景不无关系,考虑到了数据存储和处理所需要的硬件代价。
以上内容参考网络——补码
㈢ 在C语言中,整数的数值是以补码形式存放的,补码是什么意思啊
使用补码代表负数,就可以把减法,转化为加法运算。
那么,在计算机中只要有一个加法器,就可以做加、减法了。
使用补码的意义,就是简化了计算机的硬件。
常识:时钟倒拨 3 小时,可以用正拨 9 小时代替。
怎么计算,自己推导吧。
--------
两位十进制数,共有 100 个数字:00~99。
那么,减一,就可以用 +99 代替:
25-1 = 24
25 + 99 = (1) 24
取后两位,忽略进位 100,结果,不就是相同的吗?
只要利用一个“较大的正数”代替负数,就能把减法变加法了。
这个较大的正数,就是负数的补数。
计算公式:-1 的补数=100-1 = 99。
-2 的补数=100-2 = 98。
。。。
--------
计算机中,使用的是二进制。
二进制的补数,就改称为:补码。
八位二进制数,共有 256 个数字:0000 0000~1111 1111。
那么,-1 的补码就是 1111 1111 = 255(十进制)。
同理,-2 的补码就是 1111 1110 = 254(十进制)。
。。。
最后,-128的补码就是 1000 0000 = 128(十进制)。
计算公式:负数的补码=【256+这个负数】
零和正数,不需要求补数(补码),直接计算即可。
㈣ 计算机为什么使用补码来存储数据
补码的功能,类似于:
时针倒拨 3 小时,与正拨 9 小时,效果相同。
利用这种思路,计算机中的负数,也可以改为正数(即补码)。
那么,减法运算,也就可以用加法运算代替了。
因此,利用补码,就能统一加减法,够简化计算机的硬件。
十进制比较容易理解:
25 - 1 = 24
25 + 99 = (一百) 24。
只要忽略进位,+99 就能代替-1。
+99 就称为-1 的补数。
在这里用了 2 位 10 进制。
求补数的算法:补数 = 负数 + 10^2。
通用的公式是:补数 = 负数 + 10^n。n 是位数。
-----------------------
计算机用二进制,补数,就改名为:补码。
一个字节,是 8 位 2 进制。
计数范围是:0000 0000 ~ 1111 1111(十进制 255)。
计数周期是:2^8 = 256。
求补码的算法:负数的补码=负数+2^n。
那么:
-1 的补码=-1 + 256 = 255 = 1111 1111。
-2 的补码=-2 + 256 = 254 = 1111 1110。
。。。
例如,7-2 = 5,用补码计算如下:
7 = 0000 0111
[-2] 补 = 1111 1110
---相加------------
得:(1) 0000 0101 = 5
舍弃进位,结果就完全正确。
借助于补码,负数就没有了,从而就把“减法转换为加法运算”。
-----------------------
补码的来源,与原码反码毫无关系。
“取反加一、符号位也能参加运算”,这些,都没有什么理论依据。
通过原码反码,已经证明“符号位能参加运算”是错误的。
补码能正确运算,并不是什么“符号位也参加运算”。
因为,补码,它就是一个正数,什么符号位也没有。
补码的全部位,都是代表数据的,当然就都可以参加运算。
㈤ 关于数据存储原码,补码,反码
mov
只是简单的储存,单看数据本身,无法判断一个二进制数有没有符号,是用补码、反码、还是原码,甚至是否代表一个数字。那些都是编程的人为数据赋予的意义。如果有大段程序,可以看出逻辑、算法,也许可以辨别。
一般来说,表达负整数,目前只有用“补码”一个方法。“反码”和“原码”纯属历史,微处理器年代已经不用了。至于改二进制数有没有符号,就要从程序的上下文找线索了。有些指令是分有符号和无符号的,如果出现了,就比较好判断。以
8086
指令集为例:
乘
除
右移
无符号
mul
div
shr
有符号
imul
idiv
sar
㈥ 为什么负数要以补码形式存储
补码的功能类似于:时针倒拨 3 小时,与正拨 9 小时,效果相同。
那么,计算机中的负数,也可以改为正数(即补码)。
同时,减法运算,也就可以用加法运算代替了。
于是,借助于补码,就统一了加减法,就能够简化计算机的硬件。
十进制比较容易理解:
25 - 1 = 24
25 + 99 = (一百) 24。
只要忽略进位,+99 就能代替-1。
+99 就称为-1 的补数。
在这里用了 2 位 10 进制。
求补数的算法:补数 = 负数 + 10^n。
n 是位数。
-----------------------
计算机用二进制,补数,就改名为:补码。
一个字节,是 8 位 2 进制。
计数范围是:0000 0000 ~ 1111 1111(十进制 255)。
计数周期是:2^8 = 256。
求补码的算法:负数的补码=负数+2^n。
那么:
-1 的补码=-1 + 256 = 255 = 1111 1111。
-2 的补码=-2 + 256 = 254 = 1111 1110。
。。。
例如,7-2 = 5,用补码计算如下:
7 =0000 0111
[-2] 补 =1111 1110
---相加------------
得:(1)0000 0101 = 5
舍弃进位,结果就完全正确。
借助于补码,计算机中,就不存在负数了,从而就把减法转换为加法运算。
-----------------------
补码的来源,与原码反码毫无关系。
“取反加一、符号位也能参加运算”,这些,都没有什么理论依据。
通过原码反码,已经证明“符号位能参加运算”是错误的。
补码,它就是一个正数,什么符号位也没有。
补码的全部位,都是代表数据的,当然就都可以参加运算。
㈦ 计算机中数据存储!原码,反码。补码。如何转换
在计算机系统中,数值,一律用补码表示和存储。
计算机中,并没有原码和反码。
那么,什么是补码?补码和数值,是怎么换算的?
这应该从“补数”说起。
如果限定了参加计算的“位数”,就会发生不同寻常的事。
一般的计算,是用十进制来进行的。
如果,限定,只使用两位数:00~99。
那么,-1 和 +99,功能就是相同的:
25 - 1 = 24
25 + 99 = (一百) 24
在这里,99,就是-1 的“补数”。
一百,就是 10^2,则称为:计数周期。
补数的计算公式: 99 + |-1 | = 周期。
------------------------
计算机使用二进制,补数,就改称为:补码。
八位机,就是用 8 位二进制,来参加计算。
计数范围:0000 0000~1111 1111(十进制 255)。
计数周期就是:2^8 = 256。
那么:
-1 的补码,就是 256-1 = 255 = 1111 1111。
-2 的补码,就是 256-2 = 254 = 1111 1110。
。。。
求补码的通用公式,就是:周期 + 负数。
补码,就是补码。
补码和原码反码,并没有任何关系。
求补码,并不需要借助于原码和反码。
------------------------
在计算机中,利用补码,就能:用加法代替减法运算。
因此,就可以简化计算机的硬件。
例如,用补码计算: 3 + (-1) = 2。
0000 0011(= 3)
+1111 1111(用 255 当做-1)
---------------------
(1) 0000 0010(= 2)
舍弃进位,只取八位的结果,这算法,就完全正确。
㈧ 计算机中的数据存储是不是以补码的形式啊
是的
计算机是二进制的。补码嘛,将负数用正数表示。
计算机就是用补码进行运算的,所以以补码形式存储。。
㈨ 为什么数据在内存里是以补码的形式存储
数据在内存里是以补码的形式存储的原因有三点:
1、保证了0的唯一性,保证了数的表示的准确性。
2、让加减可以统一处理,优化了数的运算过程。
3、解决了自身逻辑意义的完整性。
数据在内存里以补码的形式存储是为了简化计算机的结构设计,同时也提高了运算速度。在计算机系统中,数值一律用补码来表示和存储。
(9)数据存储补码扩展阅读:
补码的主要特性:
补码为一个负整数(或原码)与其补数(或补码)相加,和为模。在补码的运算中,对一个整数的补码再求补码,等于该整数自身。补码的正零与负零表示方法相同。计算机底层不区分无符号数和补码数,可认为其运算全部当作无符号数处理。
补码使得符号位能与有效值部分一起参加运算,从而简化运算规则。使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计。所有这些转换都是在计算机的最底层进行的,而在我们使用的汇编、C等其他高级语言中使用的都是原码。
参考资料来源:网络-补码
㈩ 计算机中的负数为什么用补码存储
计算机中的负数是为了方便运算,所以计算机才会采用补码存储数据。补码是计算机方便加法运算的编码。例如100(10进制)100/16=6余46/16=0余6。所以100的16进制数是64H以8位二进制来说64H=01100100B正数的补码和原码相同。
所以100的补码还是01100100。
另假设还有个数是-109109的16进制,是01101101-109的原码,就是11101101(首位是符号位)-109的反码,就是10010010(除了符号位其他各位分别取反)。109的补码就是10010011(反码加1)。现在运算100-109=100+(-109)。01100100+10010011=11110111这个结果就是-9的补码。如果换成其他编码运算就不会这么简单了。
例如原码相加的话存在符号位进位的问题等等。对于计算机而言。数值的计算补码是最方便的。