易码技术论坛

 找回密码
 加入易码
搜索
查看: 141562|回复: 7

c问题

[复制链接]
发表于 2006-8-26 00:06:01 | 显示全部楼层
写成8位2进制来看
0的源码: 0000 0000
0的反码: 1111 1111 (即~0)
根据数制的定义,一个数的相反数用这个数的补码(反码加一)来表示,而且有
1的源码: 0000 0001
1的反码: 1111 1110 (即~1)
1的补码: 1111 1111 (即~1 + 1,也就是-1)
所以~0正好是1的补码,~0就是-1
 楼主| 发表于 2006-8-26 00:21:18 | 显示全部楼层
但是我刚刚问过别人,他说~0溢出了。这是什么意思?
发表于 2006-8-26 00:27:16 | 显示全部楼层
溢出是在做运算的时候 “最高位进位” 和 “次高位进位” 的 “异或” 的结果。而且是在有两个操作数的情况下。

还没听说过一个操作数取反会溢出。
 楼主| 发表于 2006-8-26 00:31:05 | 显示全部楼层
呵呵,就是说他乱说?
 楼主| 发表于 2006-8-26 00:33:58 | 显示全部楼层
还有,那个j不是已经定义成无符号int类型了吗?为什么还是负数?
发表于 2006-8-26 00:38:14 | 显示全部楼层
因为传递给printf后,后面的参数都是没有类型了的(因为没法定义),所以他就按照有符号数(由%d决定)来处理了。
如果要输出无符号数应该用%u。
 楼主| 发表于 2006-8-26 00:40:42 | 显示全部楼层
哦,明白!谢谢
 楼主| 发表于 2006-8-25 23:49:58 | 显示全部楼层 |阅读模式
  main()
{
int i;
unsigned int j;
i=~0;
j=~0;
printf("i=%d j=%d\n",i,j);
getch();
}

为什么i,j的值是-1?
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-4-27 22:07 , Processed in 0.011938 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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