鱼C论坛

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

C输出问题

[复制链接]
发表于 2012-10-13 22:14:01 | 显示全部楼层 |阅读模式
2鱼币
  1. #include<stdio.h>
  2. int main()
  3. { int x=20;

  4. printf("%d\n",~x);
  5. return 0;
  6. }
复制代码
输出为什么是-21,而不是-20?

最佳答案

查看完整内容

取反是对二进制的取反,整数在计算机中存放的是对应的补码,正数的补码=它本身,负数的补码=对应正数取反后+1; x=20在计算机中是 0001 0100(整数好像是4个字节,前面3个字节不写了), ~x是对 0001 0100取反等于1110 1011,根据负数的补码=对应正数取反后+1,1110 1011 - 1 = 1110 1010 ,再对1110 1010取反等于0001 0101 = 21,所以1110 1011是-21的补码,所以~x=-21,而不是-20、、、
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-10-13 22:14:02 | 显示全部楼层
取反是对二进制的取反,整数在计算机中存放的是对应的补码,正数的补码=它本身,负数的补码=对应正数取反后+1;   x=20在计算机中是 0001 0100(整数好像是4个字节,前面3个字节不写了), ~x是对
0001 0100取反等于1110 1011,根据负数的补码=对应正数取反后+1,1110 1011 - 1 = 1110 1010 ,再对1110 1010取反等于0001 0101 = 21,所以1110 1011是-21的补码,所以~x=-21,而不是-20、、、
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-10-13 22:35:28 | 显示全部楼层
x前面那个符号不是负号
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-10-13 22:41:48 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-10-13 22:44:06 | 显示全部楼层
~表示取反,你可以用windows附件自带计算器试一下,输入20,然后点一下Not,就是-21
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-10-13 22:54:43 | 显示全部楼层
绝影&瞬风 发表于 2012-10-13 22:41
不是取反?

我还没学   百度了下  关于那个取反负号是补码啥的。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-10-14 13:16:08 | 显示全部楼层
~表示取反啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-10-14 17:51:54 | 显示全部楼层
仰孝翔 发表于 2012-10-13 23:03
取反是对二进制的取反,整数在计算机中存放的是对应的补码,正数的补码=它本身,负数的补码=对应正数取反后 ...

说的不错
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-10-14 22:18:08 | 显示全部楼层
取反不是指去相反数啊,哥哥
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-10-15 07:51:35 | 显示全部楼层
假如int为两个字节,20原码0001 0100    取反后 1110 1011 由于它是负数所以对应的原码0001 0101 大小为20,所以最终结果为-20,四个字节同样的道理
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-10-15 07:52:42 | 显示全部楼层
写错了 第二个原码为0001 0100
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-10 19:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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