【发布时间】:2015-07-12 08:49:45
【问题描述】:
我正在尝试将 64 位 int 中的一组位设置为 1。 正如您在 main 循环中看到的那样,我正在使用 setBit 函数将位 40 到 47 设置为 1。 出于某种原因,我不明白第 16 位到第 23 位也设置为 1,正如您从程序的输出中看到的那样: 0000000011111111000000000000000000000000111111110000000000000000 我无法在常规 int 上模仿相同的行为。 顺便说一句,我也尝试使用 unsigned long long 而不是 int64_t 来解决同样的问题。 我错过了什么?
#include <iostream>
#include <cstdint>
using namespace std;
int64_t x = 0;
void setBit(int64_t *num, int index)
{
*num |= (1 << index);
}
bool retreiveBit(int64_t *num, int index)
{
return *num & (1 << index);
}
int main()
{
for (int i = 40; i < 48; ++i)
setBit(&x, i);
for (int i = 0; i < 64; ++i)
{
int digit = retreiveBit(&x, i);
cout << digit;
}
return 0;
}
【问题讨论】:
标签: c++