gpt4 book ai didi

c - 旋转 C 中任何整数的位

转载 作者:太空宇宙 更新时间:2023-11-04 05:46:28 25 4
gpt4 key购买 nike

将整数 2 传递给此函数,然后返回一个整数 4

x = 2;
x = rotateInt('L', x, 1);

(将位左移1)

例子:00000010 -> 向左旋转 1 -> 00000100

但是如果我通过这个:

x = rotateInt('R', x, 3); 

它将返回 64, 01000000

这是代码,谁能纠正错误...谢谢

int rotateInt(char direction, unsigned int x, int y)
{
unsigned int mask = 0;
int num = 0, result = 0;
int i;

for (i = 0; i < y; i++)
{
if (direction == 'R')
{
if ((x & 1) == 1)
x = (x ^ 129);
else
x = x >> 1;
}
else if (direction == 'L')
{
if ((x & 128) == 1)
x = (x ^ 129);
else
x = x << 1;
}
}
result = (result ^ x);
return result;
}

最佳答案

那么,我假设您知道什么是右移和左移。并且您知道算术移位和逻辑移位之间的区别。

C 只有算术移位。它不进行逻辑移位,也不进行旋转。好吧,我撒谎了,C 对无符号整数进行逻辑移位。

旋转确实如此:它与逻辑移位相同,只是当您移位超过数字末尾时,数字“环绕”到另一侧。例如

0010 向右旋转是 0001。如果您再次向右旋转,您将得到 1000。请看,1 环绕或旋转到整数的另一侧。

左旋类似:0100左旋1000左旋0001左旋0010

请注意,旋转不会像算术右移那样保留符号位。

所以,C 只有算术移位。所以你必须手动实现“旋转”部分。所以,向左旋转。你会想要:

  1. 获取最左边位的值。 (是 0 还是 1?)
  2. 左移
  3. 根据我们从第 1 步中捕获的内容,将最右边的位 - 即我们在第 1 步中讨论的位(需要旋转)设置为正确的值。

您应该能够找出类似的右旋转方法。

祝你好运!

关于c - 旋转 C 中任何整数的位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3928659/

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