gpt4 book ai didi

c - 4 位值的按位循环右移

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

我目前正在尝试使用简单的完整步骤来控制步进电机。这意味着我当前正在输出这样的值序列:

1000
0100
0010
0001

我认为一个简单的方法就是获取我的 4 位值,并在每一步之后执行右循环操作。 “代码”显然不遵循任何语法,它只是为了说明我的想法:

step = 1000;
//Looping
Motor_Out(step)
//Rotate my step variable right by 1 bit
Rotate_Right(step, 1)

我的问题是,显然没有任何 4 位简单数据类型可供我使用,如果我使用 8 位无符号整数,我最终会将 1 旋转到 MSB,这意味着我真正感兴趣的 4 位值将在几步后变成 0000。

我读到过可以使用结构和位域来解决这个问题,但我从这篇文章中读到的大部分内容都告诉我这是一个非常糟糕的主意。

最佳答案

如果只有 4 个可能的值,您将使用包含 9 个元素的表:

unsigned char table_right[] = { [0x1] = 0x8 , [0x2] = 0x1 , [0x4] = 0x2 , [0x8] = 0x4 };

当您需要下一个值时,您只需使用当前值作为索引:

unsigned char current = 0x4;    //value is: 0b0100
unsigned char next = table_right[current]; //returns: 0b0010
assert( next == 0x2 );

在循环中执行此操作,将遍历所有四个可能的值。

方便地,传递无效值将返回零,因此您可以编写一个 get 函数,该函数也断言 next != 0。在将值传递给数组之前,您还应该断言 value < 9。

关于c - 4 位值的按位循环右移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40260563/

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