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 运算符的右侧。