~1=-2?

onlyC 2005-01-31 06:32:41
请问1的反码用VC编译输出结果为-2,同样~2的结果为-3,请问这是为什么
代码如下:
#include <stdio.h>

void main()
{
unsigned int i=~1;
printf("%d\n",i);
}
...全文
127 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
更正:二进制补码
  • 打赏
  • 举报
回复
无符号-〉二进制编码
FALLEAFCSHARP 2005-02-01
  • 打赏
  • 举报
回复
vc中INT型是32位长,那么~1即11111111 11111111 11111111 11111110
用%d输出时认为是有符号型,而这个数刚好是-2的补码
sutra 2005-02-01
  • 打赏
  • 举报
回复
:
n
X = (X + 1)MOD 2
补 反
sutra 2005-02-01
  • 打赏
  • 举报
回复
n
X = (X + 1)MOD 2
补 反

如:n=1(VC6中n=32)时,(2) = 00000010 (2) = 11111101
原 反
(-2) = 2 + 00000001 = 11111110 = 254 (unsigned) OR -126 (singined)
补 反 原 原
yanhe100 2005-01-31
  • 打赏
  • 举报
回复
int main()
{
printf("%d", (signed char)127);
}
把127换成128,0,254,255等,就明白了.
avalonBBS 2005-01-31
  • 打赏
  • 举报
回复
11111110 ( ~1)
unsigned ->signed = -2

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧