flag和amp; 0xffffffff在这个例子中做了什么

时间:2016-02-23 07:25:45

标签: c

尝试将C程序转换为Javascript,因为我找到了旧的源代码。唯一的问题是我在学习C的过程中,但是对于语言的新鲜感最难的是你并不确切知道google的哪些术语。反正,

我有这段代码:

unsigned long long flag=0;

if (class[1]=='W') flag|=CF_WARRIOR;
else flag|=CF_MAGE;

在头文件中,它说

#define CF_WARRIOR (1ull<<16)

然后它的最后一部分是:

(unsigned int)(flag&0xffffffff) // Assuming some sort of type casting followed by a bitwise &?

当时不确定程序员想要完成什么。

对不起这个糟糕的问题感到抱歉,但我并不确切知道该如何解决这个问题,我知道1ull是1个无符号长long而<< 16是按位移位。但不确定|=正在做什么或flag&0xffffffff。感谢。

1 个答案:

答案 0 :(得分:5)

这是一种拒绝最高32位的方法。

flag的类型为unsigned long long,并且在实现中仅显示较低的32位。

有关详细信息,请参阅bitwise and operator in C