我正在开发一款支持Arduino的俄罗斯方块游戏。为了跟踪已经下降并变得固定的碎片,我有一个字节数组
byte theGrid[] = {
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
...
当井只有8个LED宽时,这很有效,但我需要16个宽。有没有办法对16位数进行按位运算,比如短?我试着将theGrid称为短片,但无论我做什么,我都会收到这个错误。
tetris:62: error: 'B0000000000000000' was not declared in this scope
答案 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;