2014-12-06 48 views
2

我正在研究Arduino驱动的俄罗斯方块游戏。为了保持跟踪已经下降了件并固定我有个字节如何在16位数字上执行按位运算(Arduino)

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

数组这个伟大的工程时,以及只有8个LED宽,但我需要它是16宽。有没有办法对16位数字执行按位操作,如短?我试图把网格简称为short,但无论我做什么,我都会得到这个错误。

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

回答

3

...领先的 'B' 仅与8位值(0〜255)...

工作从http://arduino.cc/en/pmwiki.php?n=Reference/IntegerConstants

只需使用十六进制表示,即。 0x0000 2个字节。
0x表示它是十六进制,并且每个数字(ABCDEF)都替换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(二进制表示)设置为0x111至0xf7的B11110111,
, 。 Btw。,x &= ~(1<<3);相当于x &= ~8;

+0

感谢您的帮助。我使用字节的原因是我可以使用bitread和bitset。 因此,如果一个L片归结和土地,我可以BITSET的相应位这样 'BITSET(theGrid [pixelY],15-pixelX);'和与 'B1000000000000000结束, B1110000000000000' – 2014-12-06 19:05:04

+0

@ ddickson1可以用C式换档和口罩替换。我会将它添加到我的答案中... – deviantfan 2014-12-06 19:07:12

+0

谢谢,你有关于该代码的文档页面,所以我可以理解我做得更好吗? – 2014-12-06 19:17:43