| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 914 人关注过本帖, 1 人收藏
标题:简单程序,求大侠为小弟解释下
只看楼主 加入收藏
greennet111
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2012-4-14
结帖率:100%
收藏(1)
已结贴  问题点数:2 回复次数:27 
简单程序,求大侠为小弟解释下
#include<stdio.h>

main()
{
    unsigned a=100;

    printf("%d\n",~a);
}
书上结果是155  为什么我的电脑上市负数啊  我不是定义为无符号的么  我的电脑上是-101 难道我的程序有问题吗
搜索更多相关主题的帖子: 上市 
2012-04-17 11:43
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
"%d"

授人以渔,不授人以鱼。
2012-04-17 11:53
greennet111
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2012-4-14
收藏
得分:0 
回复 2楼 TonyDeng
我改为%u了,可是结果为什么是4294967195了啊

巾帼不让须眉
2012-04-17 12:23
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:2 
~100本来就是-101,强制解释为unsigned int就是一个很大的正数。155是错的。

授人以渔,不授人以鱼。
2012-04-17 12:31
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
十进制的100,二进制表示是01100100,逐位取反,二进制为1111111111111111111111111111111111111111111111111111111110011011,高位全部为1,带符号时解释为-101,不带符号时就是一个庞大的正数。

注意:这里int是32位的,左边全部是1。

授人以渔,不授人以鱼。
2012-04-17 12:37
greennet111
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2012-4-14
收藏
得分:0 
回复 4楼 TonyDeng
100按二进制展开是1100100  取反的话是0011011我还是不明白-101又是怎么得来的啊   大侠,求解啊

巾帼不让须眉
2012-04-17 12:40
greennet111
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2012-4-14
收藏
得分:0 
哦哦  我才看到  谢谢啦

巾帼不让须眉
2012-04-17 12:41
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你看的可能是旧书,用8位表示int,也只考虑到最高第7位为1,却不知道这个答案其实是与字长有关的。字长不同,左边高位的0的数目不同,全部取反,自然1的数目就随着字长的增多而增多,数值越大。

其实,很多人也以为像100这样小(不超过二进制8位)的数就只考虑到最近的高位为1,而不知道实际上是全部字长所有高位都为1,当他们想当然地用n >> 1之类运算时,以为左边补进来的必定是0,偶然的成功会巩固这种错误的做法——实际的答案是“不确定”。

[ 本帖最后由 TonyDeng 于 2012-4-17 12:48 编辑 ]

授人以渔,不授人以鱼。
2012-04-17 12:42
greennet111
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2012-4-14
收藏
得分:0 
回复 5楼 TonyDeng
我还是没看明白101是哪来的  麻烦解释清楚点哈!我是太菜了

巾帼不让须眉
2012-04-17 12:46
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用greennet111在2012-4-17 12:46:23的发言:

我还是没看明白101是哪来的  麻烦解释清楚点哈!我是太菜了

100和-101,用二进制运算做加法,其结果是所有位全部为1,就按这个规则算。换句话说,如果是带符号数,前后两个值之和必定是-1;如果是不带符号数,则和是满值。

[ 本帖最后由 TonyDeng 于 2012-4-17 13:06 编辑 ]

授人以渔,不授人以鱼。
2012-04-17 12:54
快速回复:简单程序,求大侠为小弟解释下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.049478 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved