gpt4 book ai didi

c++ - 什么是n = n ^ 1U << i?

转载 作者:行者123 更新时间:2023-12-01 12:02:23 31 4
gpt4 key购买 nike

我在这里面临的问题是了解循环的每次迭代中n值的变化。
如果您通过进行2-3次迭代来说明这一点,那就太好了。
校正-返回值应为32位....这将更改所有位0-> 1 ans 1-> 0。

long fun(long n)
{
for(int i = 0; i < 32; i++)
n = n ^ 1U << i;
return n;
}

最佳答案

i正在计数。1U << i是一个单个无符号位(LSB),它每转一圈就向左移动i,即扫描位位置0001、0010、0100、1000(请读为二进制)。n = n ^ 1U << in设置为n与移位位的XOR。 IE。完全对n进行XOR。
结果是一个完全倒置的n
让我们以二进制形式查看示例13、1101的4次迭代。

1101 ^ 0001 is 1100
1100 ^ 0010 is 1110
1110 ^ 0100 is 1010
1010 ^ 1000 is 0010

0010 is 1101 ^ 1111
正如Eric Postpischil所提到的:

The parameter n to the function is a long, but the code iterates i through only 32 bits. It flips the low 32 bits in n, leaving high bits, if any, unaltered.
If long is 32 bits, then n = n ^ 1U << i is implementation-defined in some cases since the ^ of a long with an unsigned int will result in an unsigned long, and, if the resulting value cannot be represented in a long, the result is implementation-defined.


如果我们假设 n是适当的输入,例如可以在32位宽的类型中表示出来,或者仅翻转低位是有意的,那么这就不成问题了。
请注意,并使用Eric的注释,对 long进行了隐式签名,这意味着准MSB不能完全用于值表示(无论是2补码还是1补码或符号表示),因为范围的一半用于负值。然后,通过XOR进行切换可能会产生奇怪的效果。

关于c++ - 什么是n = n ^ 1U << i?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63017620/

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