arduino的按位循环运算

vol*_*lki 3 c bit-manipulation arduino

我正在用移位寄存器为 led 矩阵项目编程一个 arduino,我必须旋转输出值(这是一个字节),但是当我使用“<<”运算符时,它不会正确旋转该值,只是将零添加到 LSB 。

byte ilk=0b01100001;
int latch=10;
int clock=8;
int data=9;
void setup(){
pinMode(latch,OUTPUT);
pinMode(data,OUTPUT);
pinMode(clock,OUTPUT);
}

void loop(){
  digitalWrite(latch,LOW);
  shiftOut(data,clock,MSBFIRST,ilk);
  digitalWrite(latch,HIGH);
  ilk=ilk<<1;
  delay(200);
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能正确地做到这一点?有没有像 ROL 这样的运算符。

小智 5

因为<<不是“向左旋转”运算符。这是算术左移运算符。你可以使用类似的东西

uint32_t rotl(uint32_t n, uint32_n b)
{
    return (n << b) | (n >> (32 - b));
}
Run Code Online (Sandbox Code Playgroud)

反而。如果您希望它独立于您使用的整数类型的大小,请写入sizeof(n) * CHAR_BIT - b按位 OR 运算符的右侧。