当前位置:首页 » 编程语言 » c语言转换补码输出
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言转换补码输出

发布时间: 2022-05-27 21:11:34

1. 刚接触c语言 是说输入的时候 电脑当做补码 然后输出原码吗

“输入的时候 电脑当做补码 然后输出原码” 这样说是不正确的。

计算机存储整型数据都是采用补码来表示的。用补码
1.解决了+0,-0的问题,
2.所有的运算都可以采用加法来实现

我们在输入数据的时候,都是人现实生活中能理解的数:如,10进制数,计算机在存储的时候会自动转换成补码来存放和运算。 输出时,又会按人的要求,自动转换成相应的可识别的数据来显示。
short在32位以上的机器上占两个字节,是个有符号数,能表示的数据范围为:-32768~32767。你输入65535,走出它的表示范围,计算机中存储的是16个1,对于short类型,16个1表示的是-1,所以,你的输出是-1

2. 在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. C语言负数的补码怎么转换的如-12345怎么转化为53191的

这是有符号和无符号数值的理解,这个数在内存中的值是一样的。
二进制
1100
1111
1100
0111
如果按有符号位进行表示就是:-12345
如果按无符号的整数来理解,表示后就是:
53191
转换代码:
int
x=
-12345;
printf("%d
%d\n",x,(unsigned)(x&0xffff));
补充
对于你说的问题,可以先看-1补码
我们先看-1绝对值的二进制是0000
0001(对于把为存储)
第一位是符号
接下来去补码为取反操作:1111
1110
在加1
的1111
1111

4. C语言原码补码问题

你的这个是16的,我可以给你用8位解释一下(原理是一样的,我打起来比较方便~)

我们知道,8位二进制的补码表示范围是-128~127对吧。

而在计算机中数据都是以二进制补码进行存储的,那么-128的存储方式就是1000 0000,而它是没有原码和反码的,所以你不太能验证,对吧。

这是因为在计算机中,为了溢出特意定义的一个小玩意儿~

所以放到16来解释,它的最小值也是-32768。

但这已经是最小的数了,再减就会溢出……(理论上是这样的)

但是现实中的程序编译有一定的容错性,只要到了一定的计算机承认的位数就变成-1了。

这是因为计算机中的数好像一个轮回……

(我的计算机是32位的~)


经过实践验证了我说的东西……


如果你的程序要求指定了16位,那么就是-1,如果高于16位,就是 -32769。