# 关于c中的 移位操作，谁解释一下？

jcreatorqijiashe 2004-05-01 08:19:06

1.An ideal use for this is to set up a mask to check the values of certain bits. Say we have a BYTE that contains some bit flags, and we want to check if bit four bit is set.

BYTE b = 50;
if ( b & 0x10 )
cout << "Bit four is set" << endl;
else
cout << "Bit four is clear" << endl;

2.四位的bit代表0~F十五个数字，四个bit用nibble来表示，它可以把bit和十六进制联系起来：
So if we had one BYTE containing the letter 'r' (ASCII code 114) it would look like this:

0111 0010 binary

...全文
294 11 打赏 收藏 举报

11 条回复

jcreatorqijiashe 2004-05-03

struct date_struct {
BYTE day : 5, // 1 to 31
month : 4, // 1 to 12
year : 14; // 0 to 9999
} date;

• 打赏
• 举报

antijpn 2004-05-02

• 打赏
• 举报

dananhai 2004-05-02
“第二个问题（把bit换算成16进制）就是为了使 表达式更简洁？换算成int型不是更简洁易懂吗？ 为什麽一定要转换成16进制而不是 8进制或10进制？”

• 打赏
• 举报

jcreatorqijiashe 2004-05-02

• 打赏
• 举报

bshaozi 2004-05-02

(这个问题好像不是什么位移运算啊)
• 打赏
• 举报

jcreatorqijiashe 2004-05-02

Another ideal use, is to combine it with the & operator to ensure that certain bits are set to zero. Say we want to clear bit four

BYTE b = 50;
cout << "b = " << b << endl;
BYTE c = b & ~0x10;
cout << "c = " << c << endl;
This would result in the following calculations

00110010 - b
& 11101111 - ~0x10
----------
00100010 - result

• 打赏
• 举报

allsword 2004-05-02
“设置为标志位是做什麽，据个应用的例子”

1，我用*代替1，这样更直观点儿理解
0000
*000
**00
0*00

0000
0000
0**0
**00

2，有时要定义一个BOOL型的数组不是很长就可用位运算来代替,

3,在编游戏上用的比较多。
• 打赏
• 举报

jcreatorqijiashe 2004-05-01

〉〉比如我们可以把这个字节的8个为设置为标志位，就可以通过这个方法判断标志了。

00110010 - b
& 00010000 - & 0x10
----------
00010000 - result

• 打赏
• 举报

julyclyde 2004-05-01

• 打赏
• 举报

newegg2002 2004-05-01

• 打赏
• 举报

zhouqingyuan 2004-05-01

• 打赏
• 举报

C语言

6.6w+

C语言相关问题讨论

2004-05-01 08:19