| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 528 人关注过本帖
标题:理解不了这句代码,求助
只看楼主 加入收藏
UAPOPPING
Rank: 1
等 级:新手上路
帖 子:13
专家分:5
注 册:2015-1-21
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:4 
理解不了这句代码,求助
正在上《计算机系统》这门课,由于没有学过C语言,比较吃力。
对于下面这段代码:

!(~(x>>((sizeof(int)-1)<<3)))

我是这样理解的,sizeof(int)得到的是整数4,
然后sizeof(int)-1 就是整数3咯,
接下来我就不明白了, (sizeof(int)-1)<<3到底是什么意思?

各位师兄能给解释一下吗?

谢谢。
搜索更多相关主题的帖子: 计算机系统 C语言 
2015-01-21 04:48
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:10 
你要将这个上下文贴出来,最起码你要将这个公式 !(~(x>>((sizeof(int)-1)<<3))) 是干嘛用的说出来。
-----------------------------------------------------------------------------------------------
“sizeof(int)得到的是整数4” --- sizeof(int)得到的是int类型所占字节数,没有人说它一定等于4
-----------------------------------------------------------------------------------------------
sizeof(int)得到的是int类型所占字节数
<<3 相当于乘以8,8是一个字节所占的bits数,也就是标准宏 CHAR_BIT
那么 x>>((sizeof(int)-1)*CHAR_BIT)) 很显然就是将 x 向右移位,将高byte移动到低byte上
我猜x应该是int兼容类型,因为代码中用了sizeof(int)
对于具符号的移位,溢出是未定义的,但好在这里只移动(sizeof(int)-1)*CHAR_BIT)位,永不会溢出。
现在看来,表达式的值只跟x的符号位和最高字节的值有关,就例举一下所有的可能性
x移位后得 0……00000000,~后得 1……11111111,!后得 0
x移位后得 0……01010101,~后得 1……10101010,!后得 0
x移位后得 0……11111111,~后得 1……00000000,!后得 0
x移位后得 1……10000000,~后得 0……01111111,!后得 0
x移位后得 1……10101010,~后得 0……01010101,!后得 0
x移位后得 1……11111111,~后得 0……00000000,!后得 1
结果就这样,除非你将书上的上下文说出来,否则没法猜下去了
2015-01-21 09:22
砖家的谎言
Rank: 12Rank: 12Rank: 12
等 级:禁止访问
威 望:30
帖 子:693
专家分:3898
注 册:2013-12-6
收藏
得分:0 
是移位的意思,可以随便找本C语言基础看看

我不是砖家,要努力成为砖家。
2015-01-21 09:25
yahwei
Rank: 7Rank: 7Rank: 7
来 自:湖~
等 级:黑侠
威 望:3
帖 子:145
专家分:644
注 册:2011-11-10
收藏
得分:0 
回复 楼主 UAPOPPING
>> 是按位右移;<< 是按位左移;~ 是按位取反;! 是逻辑求非,!0 = 1,对任何非零的数求非都等于 0 。

[qq]949654600[/qq]
2015-01-21 10:03
UAPOPPING
Rank: 1
等 级:新手上路
帖 子:13
专家分:5
注 册:2015-1-21
收藏
得分:0 
回复 2楼 rjsp
多谢解答以及建议!下次问问题一定complete:)
2015-01-21 23:23
快速回复:理解不了这句代码,求助
数据加载中...
 
   



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

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