注册 登录
编程论坛 C++教室

求符号心算心得,高手请进………………

a632034079 发布于 2010-07-18 13:44, 709 次点击
int x=2,y=3,z=4;

x=(y&z);
x=(y&&z);
x=(y|z);
x=(y||z);

这类题目假如要你心算,请问大侠们有什么技巧能快速得出答案,谢谢了!!!

[ 本帖最后由 a632034079 于 2010-7-18 13:51 编辑 ]
8 回复
#2
a6320340792010-07-18 13:52
没人愿意教我吗
#3
a6320340792010-07-18 19:34
...............
#4
rainbow12010-07-18 22:55
没有技巧,除非脑袋是二进制的。。。。。。。。。。
#5
gq1987182010-07-19 13:06
我也想知道哦,帮楼主顶起
#6
mxs8102010-07-20 17:25
x=(y&&z);
x=(y||z);
这两个是逻辑运算,不用心算吧,一瞅就出来了

x=(y&z);
x=(y|z);
按位与(或)这种运算,培养对2的指数值的敏感度,
没有什么简便方法吧,哈哈
#7
ccmike982010-07-20 18:32
还是写出来算吧  
一定要心算干嘛啊
易错啊
#8
菜才2010-07-20 18:35
先算个几百题,以后一看就知道结果了。
#9
pangding2010-07-21 01:55
你如果是为做题,没有心算的必要吧~毕竟是为了拿分,笔算更靠谱,拿得稳,干什么不用?

在实际应用中,不会出现类似什么 “432423 & 342324” 得几这种问题的。
只有当问题本身就是按位定义的情况才会使用位运算。比如,文件的读写标识也许可以这样定义,以用一个数表示:
它的每个二进制位分别用与表示 binary read write append truncate 这些属性。
那么一个可读可写的文件就可以表示成 0 1 1 0 0。(如果看成十进制是 12,反而比较费解。)
一个写追加的文件就是 0 0 1 1 0。(这个是 6,十进制也不直观)
定义能看明白了吧?

现在有个问题,已经有一个文件了,希望它变成可写的,而不改变其它状态。那么应该如何做?
直观的想法就是把第三位变成 1,其它不动就行了。怎么做这件事?
? ? ? ? ? | 0 0 1 0 0 = ? ? 1 ? ? 就可以。
写成 c 语言,如果 flags 是记录属性位的,那么 flags = flags | 0x4 (或者直接 flags |= 0x4)就可以了。
想去掉可写怎么办?看这个:
? ? ? ? ? & 1 1 0 1 1 = ? ? 0 ? ?
神奇吧,而且 1 1 0 1 1 = ~ 0 0 1 0 0。

想知道一个文件是否可写,用
? ? ? ? ? & 0 0 1 0 0 是否非零就可以验证。
类似还可以做很多事,都比用十进制方便。


一种很常见的编程技巧是用宏:
#define WRIITE 0x0004

那么就可以用 flags |= WRITE 或者 flags &= ~WRITE 这样的写法了。
不仅可读性高,而且不容易写错。将来想增加新位,或改旧的,只用在宏上下手。

位运算不是你想的那么用的。虽然书上讲定义的时候,要用数学那种抽象的讲法来搞。但用的时候,人们只是利用它的直观性。
1