| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 914 人关注过本帖, 1 人收藏
标题:简单程序,求大侠为小弟解释下
只看楼主 加入收藏
greennet111
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2012-4-14
收藏
得分:0 
对了 我发现对于int a,有 a+(~a)=-1  有问题没啊

巾帼不让须眉
2012-04-17 13:46
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
是的,规则就是按这个来的,你回头再看我前面的回复。

授人以渔,不授人以鱼。
2012-04-17 13:48
greennet111
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2012-4-14
收藏
得分:0 
版主,你的想法其实和书中是一样的啊  书上解释是100(01100100)取反为155(10011011),但是我各种操作就是实现不了
#include<stdio.h>

main()
{
unsigned char a = 100;
printf("%d\n", ~a);

}    不知道哪里有问题啊   我还是了在100后面加u  输出格式改为%u   都不行

巾帼不让须眉
2012-04-17 13:57
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
    unsigned char a = ~100;
    printf_s("%d\n", a);

这是我刚运行测试过的,输出155

授人以渔,不授人以鱼。
2012-04-17 14:02
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 23楼 greennet111
它想表达的意思当然是对的,只是代码是想当然写出来的,恐怕自己都没运行过。

授人以渔,不授人以鱼。
2012-04-17 14:05
greennet111
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2012-4-14
收藏
得分:0 
我靠  ,版主你太神了,但是我搞不懂啊  两盒程序貌似没有什么区别啊

巾帼不让须眉
2012-04-17 14:05
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
有不同的。关键是printf()的处理。printf("%d\n", a),是拿a的值作为int处理,尽管a实际上是8位的char,但printf()把这个char扩展为32位的int(因为你指定了"%d"是把数值解释为int的),这样在前面补0;对printf("%d\n", ~a),是拿a的值进行~a运算,结果另存为一个32位的带符号int("%d"是带符号的),这样它的结果就是-101。而我现在写的,是把~100直接赋值给unsigned char,强制为8位的,然后让printf()扩展,也只不过在前面补0,不会影响结果。

授人以渔,不授人以鱼。
2012-04-17 14:11
greennet111
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2012-4-14
收藏
得分:0 
版主分析得非常细致,看的时候比较理解,但是要我自己说出其中的端倪我还说不清白,还要继续理解哈!!非常感谢您!!!

巾帼不让须眉
2012-04-17 14:25
快速回复:简单程序,求大侠为小弟解释下
数据加载中...
 
   



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

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