如何在C / C ++中设置,清除一个长long int数?

时间:2015-03-23 15:29:44

标签: c++ bitwise-operators

我想在64位计算机上设置long long int个数字位。 例如,我想在元素18 19处设置位,我使用以下代码:

A1 |= 1 << 2 * i;  // i = 9 , set bit 18 =1, A1 long long int
A1 &= ~(1 << 2 * i + 1); //clear bit 19 = 0

但它不起作用。如果我为long int执行此操作,则可以正常工作。

1 个答案:

答案 0 :(得分:5)

文字1的类型为int,可能小于long long。如果你移动足够的位以溢出int类型,你将得到未定义的行为(通常值为零);第二行将(可能)清除A1中但不在int值中的任何位。

使用1LL指定long long类型,或decltype(A1)(1)指定与A1匹配的类型。

通常,通常最好使用无符号类型(在这种情况下为unsigned long longuint64_t)进行比特纠缠。使用1ULL获取unsigned long long类型的文字。

相关问题