c语言中的原码,反码,补码有什么作用,是用来做什么的
发布网友
发布时间:2022-05-23 02:16
我来回答
共3个回答
热心网友
时间:2023-10-10 05:30
整数,存储计算机中,就是补码。
但是,C 语言,是高级语言。
那么,用高级语言编程,就不需要讨论计算机内部的存储形式。
因此,C 语言和补码,是完全不相关的两码事。
在 C 语言中,讨论补码(原码反码),显然是外行。
热心网友
时间:2023-10-10 05:30
计算机中的整数类都是用补码来存储的。
而C语言中不需要关心原反补码!追问那c中int的取值范围是怎么算出来的
追答int占四个字节32位
可表示2^32个数
无符号数0 --- 2^32 -1
有符号数-2^31 --- 2^31 -1
热心网友
时间:2023-10-10 05:31
(1)原码表示法
原码表示法是机器数的一种简单的表示法。其符号位用0表示正号,用:表示负号,数值一般用二进制形式表示。设有一数为x,则原码表示可记作[x]原。
例如,x1=
+1010110
x2=
一1001010
其原码记作:
[x1]原=[+1010110]原=01010110
[x2]原=[-1001010]原=11001010
原码表示数的范围与二进制位数有关。当用8位二进制来表示小数原码时,其表示范围:
最大值为0.1111111,其真值约为(0.99)10
最小值为1.1111111,其真值约为(一0.99)10
当用8位二进制来表示整数原码时,其表示范围:
最大值为01111111,其真值为(127)10
最小值为11111111,其真值为(-127)10
在原码表示法中,对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
补码表示数的范围与二进制位数有关。当采用8位二进制表示时,小数补码的表示范围:
最大为0.1111111,其真值为(0.99)10
最小为1.0000000,其真值为(一1)10
采用8位二进制表示时,整数补码的表示范围:
最大为01111111,其真值为(127)10
最小为10000000,其真值为(一128)10
在补码表示法中,0只有一种表示形式:
[+0]补=00000000
[+0]补=11111111+1=00000000(由于受设备字长的*,最后的进位丢失)
所以有[+0]补=[+0]补=00000000
(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]原