C语言的原码,反码,补码是什么意思?

作者&投稿:夔泥 (若有异议请与网页底部的电邮联系)
c语言中原码,补码分别是什么意思~

原码:正数末尾取0,负数尾数为1;补码:正数=原码,负数为反码(除符号位)+1 比如 12 -12 原码 0001100 1001100反码 0001100 1110011补码 0001100 1110110

数在计算机中是以二进制形式表示的。
数分为有符号数和无符号数。
原码、反码、补码都是有符号定点数的表示方法。
一个有符号定点数的最高位为符号位,0是正,1是负。

以下都以8位整数为例,

原码就是这个数本身的二进制形式。
例如
1000001 就是-1
0000001 就是+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位原码能表示的数多一个

1)原码表示

原码表示法是机器数的一种简单的表示法。其符号位用0表示正号,用:表示负号,数值一般用二进制形式表示。设有一数为x,则原码表示可记作[x]原。

例如,X1= +1010110

X2= 一1001010

其原码记作:

[X1]原=[+1010110]原=01010110

[X2]原=[-1001010]原=11001010

在原码表示法中,对0有两种表示形式:

[+0]原=00000000

[-0] 原=10000000

2)补码表示

机器数的补码可由原码得到。如果机器数是正数,则该机器数的补码与原码一样;如果机器数是负数,则该机器数的补码是对它的原码(除符号位外)各位取反,并在未位加1而得到的。设有一数X,则X的补码表示记作[X]补。

例如,[X1]=+1010110
[X2]= 一1001010
[X1]原=01010110
[X1]补=01010110
即 [X1]原=[X1]补=01010110
[X2] 原= 11001010
[X2] 补=10110101+1=10110110
机器数的补码可由原码得到。如果机器数是正数,则该机器数的补码与原码一样;如果机器数是负数,则该机器数的补码是对它的原码(除符号位外)各位取反,并在未位加1而得到的。设有一数X,则X的补码表示记作[X]补。
例如,[X1]=+1010110
[X2]= 一1001010
[X1]原=01010110
[X1]补=01010110
即 [X1]原=[X1]补=01010110
[X2] 原= 11001010
[X2] 补=10110101+1=10110110

(3)反码表示法

机器数的反码可由原码得到。如果机器数是正数,则该机器数的反码与原码一样;如果机器数是负数,则该机器数的反码是对它的原码(符号位除外)各位取反而得到的。设有一数X,则X的反码表示记作[X]反。

例如:X1= +1010110
X2= 一1001010
[X1]原=01010110
[X1]反=[X1]原=01010110
[X2]原=11001010
[X2]反=10110101

反码通常作为求补过程的中间形式,即在一个负数的反码的未位上加1,就得到了该负数的补码。

例1. 已知[X]原=10011010,求[X]补。

分析如下:

由[X]原求[X]补的原则是:若机器数为正数,则[X]原=[X]补;若机器数为负数,则该机器数的补码可对它的原码(符号位除外)所有位求反,再在未位加1而得到。现给定的机器数为负数,故有[X]补=[X]原十1,即

[X]原=10011010
[X]反=11100101+1
[X]补=11100110

例2. 已知[X]补=11100110,求[X]原。

分析如下:

对于机器数为正数,则[X]原=[X]补
对于机器数为负数,则有[X]原=[[X]补]补
现给定的为负数,故有:
[X]补=11100110
[[X]补]反=10011001+1
[[X]补]补=10011010=[X]原+1
[[X]补]补=10011010=[X]原

总结一下,原码(为负时,正时都不变)全部取反即得到反码,反码加
"1"就得到补码了,就是这么简单。

计算机里面,没有原码和反码。

补码,是在计算机内部,正负数的存放格式。

C 语言是高级语言。

用高级语言编程,是不用关心计算机内部的事的。

如果非要涉及计算机内部的细节,那就不是高级语言了。

很多教材书籍的作者,都没有弄明白:什么是高级语言。

计算机内部的码,有很多种了,要是讨论起来,C 语言就学不完了。



C 语言中,并没有补码。

而且,在计算机中,也根本就没有原码和反码。

用 C 语言编程,你只需使用小学生都懂的十进制数、正负号,即可。

用 C 语言编程,你只需关心:图书馆管理、财务管理。。。

补码,是在计算机内部,正负数的存放格式。

计算机内部的事,由“编译软件”帮你处理,这就行了。

而 C 语言,这可是高级语言哪!

深入讨论计算机内部,这就不是“高级语言”了。

千万不要舍本求末。



C语言源码就是C语言编辑好的原始程序,没有改动过的。
补骂就是后续程序出现各种情况,需要增加或者修改内容,再次改动的。

楼下正解关于反马是反编译?

原码,反码,补码的定义是什么. 最好能举例说明呵呵!
答:[+7]反= 0 0000111 [-7]反= 1 1111000 补码:正数的补码和原码相同.负数的补码则是符号位为“1”,数值部分按位取反后再在末位(最低位)加1.也就是“反码+1”.[+7]补= 0 0000111 [-7]补= 1 1111001

补码,原码,反码什么的。有什么作用啊!
答:1、补码:解决负数加法运算正负零问题,弥补了反码的不足。2、原码:可直观反映出数据的大小。3、反码:解决负数加法运算问题,将减法运算转换为加法运算,从而简化运算规则。

补码,原码,反码什么的。有什么作用啊!
答:原码:原码就是早期用来表示数字的一种方式: 一个正数,转换为二进制位就是这个正数的原码。负数的绝对值转换成二进制位然后在高位补1就是这个负数的原码。举例:int类型的 3 的原码是 11B(B表示二进制位), 在32位机器上占四个字节,那么高位补零就得:00000000 00000000 00000000 00000011 int类型的...

C语言中,什么是补码、源码、反码?分别怎样计算?
答:二、反码 求反码:若X≥0,符号位为0,其余照抄;若X≤0,符号位为1,其余按位取反。【例3】X=+1001001 [X]反 = 01001001 【例4】X=-1001001 [X]反 = 10110110 三、补码 求补码:若X≥0,符号位为0,其余照抄;若X≤0,符号位为1,其余取反后,最低位加1。【例5】X=+10010...

计算机的原码,反码,补码是怎么回事?可以举例说明吗?
答:原码、反码和补码是计算机中对数字二进制的三种表示方法。1、原码 原码(trueform)是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种表示:+0和-0),其余位表示数值的大小。例如:用8位二进制表示一个数,...

C语言编程之二进制原码、反码和补码
答:在计算机中,数据是以补码的形式存储的,所以补码在c语言的教学中有比较重要的地位,而讲解补码必须涉及到原码、反码。详细释义 所谓原码就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取...

关于C语言的原码、反码、补码
答:正数 原码、反码、补码 一样。负数,补码等于反码加1.反码:不考虑符号位,按位取反(1-〉0,0-〉1).补码 10000000 反码 = 补码 - 1 = 01111111 原码 = 不考虑符号位,按位取反 = 00000000

什么是原码 补码 反码
答:在计算机系统中,原码和反码,都是不存在的。=== 数值 0,在八位机中,就是 0000 0000。+1,就是加上一,即为:0000 0001。+2,就再加上一,即为:0000 0010。其他正数,依次递增即可。。。最后的是+127,即为:0111 1111。以上这些,就是正数的补码。--- 负数,就是从 0 往下减...

计算机中的原码,补码,反码是什么意思?
答:反码(One's Complement):反码与原码类似,仍然使用符号位和数值位。符号位和原码相同,用于表示正负。数值位表示整数的绝对值,但负数的数值位取反(0变为1,1变为0)。例如,十进制数 -5 的反码为 11111010,其中第一位表示负号,其余表示5的绝对值。补码(Two's Complement):补码也使用符号位...

原码,反码,补码,是什么?
答:带符号数,有三种表示方法,即:原码、反码和补码。但是,在计算机系统中,数值一律用【补码】来表示和存储。所以,在计算机系统中,原码和反码,都是不存在的。使用补码的意义:可以把减法或负数,转换为加法运算。因此,就能简化计算机的硬件。=== 补码的概念,来自于:补数。比如钟表,时针转一圈...