如何对16位数字执行按位运算(Arduino)

时间:2014-12-06 18:45:18

标签: c++ c arduino bit-manipulation

我正在开发一款支持Arduino的俄罗斯方块游戏。为了跟踪已经下降并变得固定的碎片,我有一个字节数组

byte theGrid[] = {   
B00000000,
B00000000,  
B00000000,
B00000000,
B00000000,
...

当井只有8个LED宽时,这很有效,但我需要16个宽。有没有办法对16位数进行按位运算,比如短?我试着将theGrid称为短片,但无论我做什么,我都会收到这个错误。

tetris:62: error: 'B0000000000000000' was not declared in this scope

1 个答案:

答案 0 :(得分:3)

  

......领先' B'仅适用于8位值(0到255)......

来自http://arduino.cc/en/pmwiki.php?n=Reference/IntegerConstants

只需使用十六进制表示法,即。 0x0000代表2个字节 0x表示它是十六进制,每个数字(0123456789ABCDEF)替换为4位。

您可以使用以下代码代替bitRead和bitSet; 变量是x,位号为i,i = 0是最右边的位,1是下一个......):

//set bit to 1
x |= 1<<i;
//set bit to 0
x &= ~(1<<i);
//check if bit is set
if(x & (1<<i))  

EG。 x &= ~(1<<3);将值B11111111(二进制表示)设置为B11110111,
这是0xff到0xf7。顺便说一句,x &= ~(1<<3);相当于x &= ~8;