gpt4 book ai didi

c++ - 如何在 C++ 中检查 "long long int"的特定位

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:21:45 25 4
gpt4 key购买 nike

我正在尝试检查一个 long long 整数的特定位

long long int val=23355665641326;
int bit_no=32;
if( (val & (1<<bit_no)) == 0)
cout<<bit_no<<"'th bit is not set\n";
else
cout<<bit_no<<"'th bit is set\n";

23355665641326 的二进制等价物是 -

101010011110111101010001001110110111101101110
^

我们看到,第 32 位已设置。但是我的代码返回未设置:(
我怎样才能检查位?

最佳答案

如果你使用std::bitset,你的生活会很轻松相反:

constexpr auto N = CHAR_BIT * sizeof(long long int);

std::bitset<N> val(23355665641326LL);

现在您可以测试特定位:

if ( val.test(i) ) {
//bit at index i is set!
}

或者您可以使用更快但不安全的版本,如:

if ( val[i] ) {
//bit at index i is set!
}

test() 执行绑定(bind)检查并在索引无效时抛出 std::out_of_range,而 operator[] 则不会,在在这种情况下,无效索引会导致未定义的行为。

关于c++ - 如何在 C++ 中检查 "long long int"的特定位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29753539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com