问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言原码补码问题2

发布网友 发布时间:2023-10-16 08:24

我来回答

3个回答

热心网友 时间:2024-12-10 12:04

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

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

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

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

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

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

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

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

这个是我的计算机能接受的范围。


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


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


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

热心网友 时间:2024-12-10 12:04

整数有正整数和负整数,为了表示负数,一般用最高位来表示符号,因此,最高位是不能用来表示数值的。所以,一个16位的整数最大值为:

2^15=32767(10)=7FFF(16)=0111 1111 1111 1111(2),括号后面是进制。
也就是除去最高位,用来保存数值的位数是总位数-1,也就是15位。

而用1代表负数,0代表正数,按理,最小负数就应该是最高位设1:
FFFF(16)= - 32767 = 1111 1111 1111 1111(2)

但是这样的话,0值就有正负之分了,但数学上0是中性的没有正负之分,那么假如保留正0代表0,另一个,也就是1000 0000 0000 0000(2)就浪费了。因此编码专家采用补码表示法来表示负数,而正数保留原来的编码形式,叫做原码表示法。

补码是在原码基础上按位取反+1,也即:
取-32767的绝对值,也即去符号为32767(10)=7FFF(16)=0111 1111 1111 1111(2)
按位取反:1000 0000 0000 0000(2)
+1:1000 0000 0000 0001(2)
转换成16进制就是:8001
打印输出时,由于最高位为1,因此系统认为是负数,就按补码解码,输出为 -32767。

再来看看 -1
取-1的绝对值后的为1(10)=0001(16)=0000 0000 0000 0001(2)
按位取反:1111 1111 1111 1110(2)
+1:1111 1111 1111 1111(2)
转换成16进制: FFFF
同样打印输出时按补码解码,输出为-1

可见负数的绝对值越小(比如1),补码数值部分越大(7FFF),绝对值越大7FFF,补码数值部分越小0001,使得编码与原码的编码相反。这样,负0编码就可以看做 -32768了,把负0编码利用起来了。

验证一下 -32768:
取-32768的绝对值为32768(10)=8000(16)= 1000 0000 0000 0000(2)
按位取反: 0111 1111 1111 1111(2)
+1:1000 0000 0000 0000(2)
转换成16进制:8000

如果不用补码表示而是用原码表示负数数值,那么编码1000 0000 0000 0000(2)表示的是负0,且负数端最小值为 -32767,而采用补码表示,负0这个编码可以利用起来用来表示-32768。使得整数范围增加了1,达到-32768- +32767 ,不浪费编码空间。

热心网友 时间:2024-12-10 12:05

1. 原码
原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:
[+1]原 = 0000 0001
[-1]原 = 1000 0001
第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:
[1111 1111 , 0111 1111]

[-127 , 127]
原码是人脑最容易理解和计算的表示方式.
2. 反码
反码的表示方法是:
正数的反码是其本身
负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
可见如果一个反码表示的是负数, 人脑无法直观的看出来它的数值. 通常要将其转换成原码再计算.
3. 补码
补码的表示方法是:
正数的补码就是其本身
负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补
对于负数, 补码表示方式也是人脑无法直观看出其数值的. 通常也需要转换成原码在计算其数值.

你给的10000000 00000000是用补码表示的。
也就是说:-32768的原码是:11000000000000000
那么他的补码就是符号位不变,其余各位取反再加1。

希望能帮到你。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
急求高人解答 ···管理类的问题 ···!!!急急急···我会在线等... ...如果基层管理幅度为8,高层管理人员管理幅度为3,则该公司中层管理人员... ...发生化学变化的实质是( )A.分子间隔发生变化B.物质状态发生改变C... 下列变化不能说明发生了化学变化的是( )A.变化时有电子的得失或共用电... 下列描述正确的是( )A.固态物质的分子间无间隔B.液态物质的分子不断运动... 原来微信打开这个功能,能够看到马路上的街景,涨知识了! ...百度帐号被人在异地登录了,问题是没有任何人知道我的密码啊?而且也... 医疗事故纠纷和医疗损害纠纷的区别是什么 医疗纠纷与医疗事故的定义是什么? 医疗事故纠纷是指什么的 ...公式及计算公式的原理是什么? 希望给予解答 不小心吃了中性水银笔里面的水银怎么办2 我的起源高级恐龙怎么培养 谁知道怎样给BB上技能(天龙八部) 公司刚成立,请问公司的所有文件应该按什么规则编号?93 关于计算机存储的是补码的问题25 C语言,输出补码6 萌新求问,为什么负数加上2147483647 + 1后算二进...3 ...什么意思?望机械方面的专家能给予指导,谢谢! 蜗牛能养活吗?以前养过都死了31 你好,你们这是养蜗牛的吗?现在还养不?1 谁知道电影《公主日记》的主题曲和插曲4 九成新是什么意思356 月经期间没有流血,而是一点点黄褐色的分泌物。时间是正常的,就是不知道... ...前夫打电话告知会见日。前妻想领俩岁孩子去探监,需要什么证件?_百度... 2020年奥运会在哪里举行14 爱立顺平板电脑开不了机怎么恢复出厂设置2 ISO三阶文件编号,公司程序文件上规定是三阶代码+部门代码+...2 2021年的冬奥会在哪里举行14 不小心吃到了水银笔中的水银有毒吗 天龙八部宠物怎么学技能? 工厂搬迁改名,ISO9001质量管理体系应该做哪些更改,质量...3 公主岭南站到伊通县怎么走,怎么坐车?4 长沙南站到长沙火车站坐地铁几号线 公主岭站到伊通县拼车或者客车,在哪坐车,需要多长时间能到2 水银笔有毒性吗?(手袋厂做记号用)1 谁能告诉我伊通有火车站吗?4 公主岭火车站去伊通,在哪里拼车,需要多长时间能到伊通 伊通到公主岭途经马鞍的客车几点2 水银笔有什么用2 新天龙八部3珍兽开阳类技能和破军类技能怎么同时有,怎么上技能? 煮羊头应该放什么调料79 娃娃菜四个字菜名 什么是双频段路由器?有什么优点14 ...父亲姓雷,母亲姓缐,2013年3月31日上午9点42分出生,求高人按五行取名... 电脑电源固定螺丝孔容易滑丝吗,怎么预防滑丝呢? 要有关爱心的议论文(论点、论据)8 关于爱的论点论据31 自动装盒机厂家哪里好 螺丝滑丝怎么办?6