gpt4 book ai didi

c 中的循环移位

转载 作者:太空狗 更新时间:2023-10-29 16:24:22 26 4
gpt4 key购买 nike

下面的代码是如何工作的,变量是什么意思:

y = (x << shift) | (x >> (sizeof(x)*CHAR_BIT - shift));

我在一篇循环类次文章中找到但没有解释这是如何工作的。

最佳答案

这是一种循环移位的方法。假设 x 是 8 位。

+----+----+----+----+----+----+----+----+| x1   x2   x3   x4   x5   x6   x7   x8 |+----+----+----+----+----+----+----+----+

然后,将它左移 3 给我们:

+----+----+----+----+----+----+----+----+| x4   x5   x6   x7   x8    0    0    0 |+----+----+----+----+----+----+----+----+

现在,CHAR_BIT*sizeof(x)x 的宽度相同,单位为 8。因此将 x 移动到右边 8 - 3 给我们:

+----+----+----+----+----+----+----+----+| 0    0    0    0    0    x1   x2   x3 |+----+----+----+----+----+----+----+----+

并进行 OR 你得到:

+----+----+----+----+----+----+----+----+| x4   x5   x6   x7   x8   x1   x2   x3 |+----+----+----+----+----+----+----+----+

这在技术上是不可移植的,因为移动等于类型宽度的量是不可移植的——所以如果 shift 是 8,那么左移是错误的,如果 shift 是 0,那么正确的转变是错误的。但是,这实际上适用于按类型宽度移动时的所有三种常见行为。 (在实践中,移位量减少了一些模数——类型的位宽或更大的数字。)

它被称为循环移位或“旋转”,因为从左边移出的位会在右边移回。

复杂的编译器实际上会将代码编译成硬件循环指令。

关于c 中的循环移位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13289397/

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