我正在尝试处理位板,这需要我在64位无符号整数中设置特定位。为了将设置为,我对所讨论的位板进行了按位或运算,并向左移动了数字。#include <stdint.h>uint64_t kings = 0ULL; // Also tried unsigned long long int before.kings |= 1 << i;从第0位到第31位,它可以正常工作,但对于第32位至第63位,则无法工作。我怀疑这是因为右侧的求值恰好是32位整数。因此,我尝试了一个临时变量。uint64_t temp = 0ULL;temp |= 1 << i;也许它仍然将右侧评估为32位整数,或者这是我无法弄清楚的其他问题。为了输出整数,我使用了std::bitset 。例如:uint64_t kings = 0ULL;kings |= 1 << 3;kings |= 1 << 59;期望的十进制值:576460752303423496实际:8std::bitset<64> x(kings);std::cout << x;位值:0000000000000000000000000000000000000000000000000000000000000000000000001000显然,只有国王| = 1 总而言之,第32至63位有什么问题,我该如何解决? (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 您需要使用1LL作为64位值,然后才能使用shift operator <<获得64位结果:#include <stdint.h>uint64_t kings = 0ULL;kings |= 1ULL << i; (adsbygoogle = window.adsbygoogle || []).push({});
10-06 15:25