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

An *_*yễn 1 c++ bitwise-operators

我想在long long int64位机器上设置一个数字位.例如,我想在元素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
Run Code Online (Sandbox Code Playgroud)

但它不起作用.如果我这样做long int,它工作正常.

Mik*_*our 5

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

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

通常,通常最好使用无符号类型(unsigned long long或者uint64_t在这种情况下)进行比特纠缠.使用1ULL得到一个文本类型的unsigned long long.