我想在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
执行此操作,则可以正常工作。
答案 0 :(得分:5)
文字1
的类型为int
,可能小于long long
。如果你移动足够的位以溢出int
类型,你将得到未定义的行为(通常值为零);第二行将(可能)清除A1
中但不在int
值中的任何位。
使用1LL
指定long long
类型,或decltype(A1)(1)
指定与A1
匹配的类型。
通常,通常最好使用无符号类型(在这种情况下为unsigned long long
或uint64_t
)进行比特纠缠。使用1ULL
获取unsigned long long
类型的文字。