gpt4 book ai didi

c++ - 通过使用 size_t 的否定翻转最低有效一位

转载 作者:行者123 更新时间:2023-12-01 14:18:07 28 4
gpt4 key购买 nike

我最近遇到一段代码,据说可以正常工作,但我不太明白为什么。

size_t a = 19;
std::cout<<std::bitset<8>(a)<<std::endl;
a ^= a & -a;
std::cout<<std::bitset<8>(a)<<std::endl;

这段代码将反转给定无符号整数的最低有效位。我宁愿只写 a ^= 1;,但我对上面这段代码为什么能正常工作感到困惑。我认为使 unsigned int 为负数会导致未定义的行为吗?

最佳答案

a & -a为您提供 a 中设置的最低有效 1 位.对于奇数,它确实是 1,但当然通常情况并非如此。

制作 unsigned negative 是一个定义明确且偶尔有用的符号:-aa-a + 2N 其中 N 是类型中的位数。替代写作 size_t a = std::numeric_limits<size_t>::max();就是写size_t a = -1;例如。

所以 a ^= a & -a;将最低有效 1 位翻转为 0。

真的很聪明。

关于c++ - 通过使用 size_t 的否定翻转最低有效一位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63719178/

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