鱼C论坛

 找回密码
 立即注册
查看: 5350|回复: 10

C语言补码问题

[复制链接]
发表于 2012-7-5 16:55:15 | 显示全部楼层 |阅读模式
1鱼币
例题:求-10的补码

10的原码 00001010
求各位高手帮我用通俗易懂的解法帮解决这道题,我都不知道补码是什么意思?
这是有一个网友回答的:对于正数来说,原码补码反码都一样。
对于负数来说。补码就是反码加一。-10的二进制是11111010,反码是00000101,再加一是00000110. 可是我还是没搞懂,反码是00000101,再加1怎么得出的结果是00000110? 请各位高手帮我解决这个问题,谢谢了,我是C语言新手,为了这一题好纠结。。-10的二进制是11111010,怎么算出来的?谢谢大家。

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-7-5 17:56:40 | 显示全部楼层
拿机器字长8 来说明:
10的原码:0(符号位) 0001010    -10的原码: 1(符号位) 0001010  最高位代表符号位 0 代表正数 1代表负数
10的反码:0(符号位) 0001010    -10的反码: 1(符号位) 1110101 在反码表示法中 正数的原码和反码相同 负数的反码则是其按位求反
10的补码:0(符号位) 0001010    -10的补码: 1(符号位) 1110110 在补码表示法中 正数的原码,反码,补码都相同, 负数的补码则等于其反码末尾加1.
10的移码:1(符号位) 0001010    -10的移码: 0(符号位) 1110110 移码只需在其补码基础上 将补码的最高位按位求反就可以 了 。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-5 19:30:49 | 显示全部楼层

分享你一个吧。。。 -10 == 0 - 10.    换成二进制的减法 就是  8位限宽的话,
0000 0000 - 0000 1010 == 1111 1110        不够向前一位借一个,就跟十进制的减法一样,  就是这样算出来的,对于所有的负数都通用。。。  若原码补码你还没有根深蒂固,你完全可以抛弃那种说法。。。    要明白进制,都是浮云。。。我刚才的那种算法,就是根据 8位限宽的话,1111 1111 + 1 == 0   一个线路板就那么宽,就相当于一个圆,从头到尾从尾到头。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-5 19:32:26 | 显示全部楼层
丿夏夜灬彬刂 发表于 2012-7-5 17:56
拿机器字长8 来说明:
10的原码:0(符号位) 0001010    -10的原码: 1(符号位) 0001010  最高位代表符号位 0  ...

哦  哪里写错了   0000 0000 - 0000 1010 == 1111 0110  失误。。。你可以在纸上算一下。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-5 20:11:49 | 显示全部楼层
...都是狗屁的国内教材惹的祸。
原码,相信各位都知道,每个2进制位都有权值;补码和原码类似,每个2进制位也有权值,唯一不同的是,补码的符号位权值为负。
例如,补码 1,11(我习惯在符号位后面加逗号)表示的数是  1*(-2^2)+1*2^1+1*2^0 = -4+2+1=-1

LZde问题反过来做也一样:
-10 = -16+4+2 = 1*(-2^4) + 0*(2^3)+1*2^2 + 1*2^1 +0*(2^0) = 1,0110
当然如果长度不只5比特的话,可以做符号位扩展
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-5 20:59:26 | 显示全部楼层
哎呀 其实老简单了  
什么 符号位 求反加一 原码 反码  全TMD扯淡   咱们就用加减法来算就好了吗

用 1 0000 0000(这个值是固定的),减去所要算的数字的绝对值
例如:
求 -10 的补码
已知  -10的绝对值 也就是 10的二进制代码是  1010

咱们就用  100000000-1010= 11110110
这个 11110110  就是 -10 的补码了呀

多简单呀 一个剪发解决问题
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-5 21:06:27 | 显示全部楼层
都是大神级的见解啊  涨知识咯:lol
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-8-29 10:56:48 | 显示全部楼层
学习了     {:1_1:}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-9-1 19:50:49 | 显示全部楼层
负数的补码=原码各位取反,末位加1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-9-12 20:37:22 | 显示全部楼层
0000000000000000000000
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-12-23 20:03:38 | 显示全部楼层
我也为这个问题纳闷很久 这个和和二进制有关 二进制的特性是逢2进1,101 +1 ==102 2进1
=110
101+11=112=120=200=1000
所以再加1得出的结果是00000110
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-14 01:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表