⑴ c语言中,原码,补码和反码怎么换算
换算方法如下:
1、数在计算机中是以二进制形式表示的。
2、数分为有符号数和无符号数,原码、反码、补码都是有符号定点数的表示方法。
3、一个有符号定点数的最高位为符号位,0是正,1是副;【原码】就是这个数本身的二进制形式。
4、正数的【反码】和补码都是和原码相同;负数的【反码】是将其原码除符号位之外的个位求反。
拓展资料
1、C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
2、尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
⑵ C语言中,原码,补码和反码怎么换算
数在计算机中是以二进制形式表示的。
数分为有符号数和无符号数。
原码、反码、补码都是有符号定点数的表示方法。
一个有符号定点数的最高位为符号位,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位原码能表示的数多一个
⑶ 一个简单的C语言题
为什么需要编码?因为计算机世界只有0和1之分,而现实世界,我们常用的是十进制。为了让计算机和现实世界联系起来,编码便诞生了。计算机中,采用字节来存储信息,一个字节有8个二进制位组成。
首先需要知道,编码方式有很多种,如ASCII编码,BCD编码等等。最后被人们广泛接受和使用的,才是最经典的。你说的BCD码用的不多,至少我是这么认为的。说说BCD编码规则,它是用4位二进制数来表示一个十进制数。如,41的BCD码为 0100 0001,这个好理解吧!0100表示4,0001表示1.
而原码、反码和补码是计算机世界采用的编码方式,现在BCD码在计算机中用的很少。计算机实际存放的是数据的补码,原码和反码是为了让人们好理解,弄出来的概念。
最后来回答你的问题,41的原码为0010 1001 ,反码为0010 1001,补码和原码一样,还是0010 1001。
为什么是这样的呢,先看三个规则:
1.所谓原码就是二进制定点表示法,即最高位为号符位,“0”表示正,“1”表示负,其余位表示数值的大小。
2.反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
3、补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。
41 = 32+8+1,因为是正数,所以最高位为0,这样得出来的是原码。反码呢,按照规则,也是这么多,好理解吧!补码就稍微麻烦点,如果原数是一个正数,则补码和原码相同,如果原数是一个负数,则结果是其反码的最后一位加1.
相信你应该懂了! 希望可以帮到你!
⑷ c语言编程中的原码是怎么得出的
这里的"10的原码"就是指10的二进制形式,也就是将十进制数字10转换为二进制数字就得到了10的原码.
⑸ c语言中原码,补码分别是什么意思
原码就是原来数字的二进制的表示 比如 15= 1110 这个是15的原码 他的补码就是0001
⑹ 在C语言中,“原码,反码和补码”有什么不同啊
正数的原码,反码和补码都一样的,而负数就不一样了!计算机为了让所有的数都是进行同一个加法运算,就有了原码,反码和补码的产生!负数的补码等于它的绝对值的原码取反后得到这个负数的反码,而在反码的基础上加1就变成了这个负数的补码了!下面我用8位的来举例(最高位是符号位):
45
原码:00101101
反码:00101101
补码:00101101
-45
原码:10101101
反码:11010010(原码取反:符号位不变,而其它0变1,1变0)
补码:11010011(反码:11010010
+1=11010011)
---------------------------------------------
明白了没有?找这方面的书看看吧!
⑺ C语言中八进制和十六进制怎么表示以及原码,反码
比如十进制的17,
八进制表示为:021 前面加0
十六进制表示为:0x11 前面加0x或者0X
原码是用二进制表示如果是8bit原码则为 0001 0001
反码为二进制的相反,0变为1,1变为0,则反码为1110 1110
⑻ c语言 关于有符号、无符号和补码、原码
在C语言中:只有十进制数有符号,八进制和十六进制没有的,一个数的原码是其二进制数,补码是对原码取反后再加上1,
比如: 5则原码是 101,则反码是010,补码=010+1=011
⑼ C语言中八进制和十六进制怎么表示以及原码,反码
比如十进制的17,
八进制表示为:021
前面加0
十六进制表示为:0x11
前面加0x或者0X
原码是用二进制表示如果是8bit原码则为
0001
0001
反码为二进制的相反,0变为1,1变为0,则反码为1110
1110
⑽ C语言的原码,反码,补码是什么意思
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"就得到补码了,就是这么简单。