C++ 如何对16位数字执行按位操作(Arduino)

C++ 如何对16位数字执行按位操作(Arduino),c++,c,arduino,bit-manipulation,C++,C,Arduino,Bit Manipulation,我正在做一个Arduino驱动的俄罗斯方块游戏。为了跟踪掉落并修复的碎片,我有一个字节数组 byte theGrid[] = { B00000000, B00000000, B00000000, B00000000, B00000000, ... 这是伟大的作品时,井只有8个LED宽,但我需要它是16宽。有没有一种方法可以对16位数字执行按位操作,比如短字符?我试着将网格声明为短网格,但无论我做什么,都会遇到这个错误 tetris:62: error: 'B0000000000000

我正在做一个Arduino驱动的俄罗斯方块游戏。为了跟踪掉落并修复的碎片,我有一个字节数组

byte theGrid[] = {   
B00000000,
B00000000,  
B00000000,
B00000000,
B00000000,
...
这是伟大的作品时,井只有8个LED宽,但我需要它是16宽。有没有一种方法可以对16位数字执行按位操作,比如短字符?我试着将网格声明为短网格,但无论我做什么,都会遇到这个错误

tetris:62: error: 'B0000000000000000' was not declared in this scope
…前导“B”仅适用于8位值(0到255)

只需使用十六进制表示法,即两个字节的“
0x0000”

0x
表示它是十六进制,每个数字(
0123456789ABCDEF
)替换4位

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

//将位设置为1

感谢您的帮助。我之所以使用byte,是因为我可以使用bitread和bitset。因此,如果一个L片段落下并落地,我可以像这样对适当的位进行位设置
位集(网格[pixelY],15 pixelX)并以
B1000000000000000、B1110000000000000
@ddickson1结束,可以用C风格的移位和掩码替换。我会把它添加到我的答案中…谢谢,你有没有关于代码的文档页面,这样我就能更好地理解我在做什么?只要阅读你的编辑,现在就有意义了。非常感谢你,我想这个就行了!Arduino有,但有更好的解释。它不是ARDUNO特定的,而是一般C和C++。如果我能找到一些解释,说明为什么它现在可以工作,而不是自己写:/
//set bit to 1
x |= 1<<i;
//set bit to 0
x &= ~(1<<i);
//check if bit is set
if(x & (1<<i))