2014-12-06 2 views
2

나는 Arduino 구동 테트리스 게임을 연구하고 있습니다. 떨어진 조각을 추적하기 위해 고정 될 나는 잘은 8 LED가 넓은 경우는 잘 작동 바이트16 비트 숫자에서 비트 연산을 수행하는 방법 (Arduino)

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

의 배열을 가지고,하지만 난 그것을 넓은 16해야합니다. 16 비트 숫자에 비트 단위 연산을 수행하는 방법이 있습니까? 나는 theGrid를 short로 선언하려고 시도했지만, 내가 무엇을해도이 오류가 발생했습니다.

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

답변

3

은 ... 'B'를 선도 만

그냥 즉 16 진법을 사용 http://arduino.cc/en/pmwiki.php?n=Reference/IntegerConstants에서 8 개 비트 값 (0 ~ 255) ...

와 함께 작동합니다. 2 바이트는 0x0000입니다.
0x은 16 진수임을 알리고 모든 숫자 (ABCDEF)는 4 비트를 대체합니다.

bitRead 및 bitSet 대신 다음 코드를 사용할 수 있습니다.

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

예 :
변수는 0이 가장 오른쪽 비트는, 1) ... 옆 = 1로 x와 비트 수 I이다. x &= ~(1<<3);은 값 B11111111 (이진 표현)을 B11110111,
으로 설정합니다.이 값은 0xff에서 0xf7입니다. Btw., x &= ~(1<<3);은 (는) x &= ~8;에 해당합니다.

+0

도움 주셔서 감사합니다. 내가 바이트를 사용하는 이유는 비트 리드와 비트셋을 사용할 수 있기 때문입니다. L 자 피스 아래 랜드 오면 그래서,이 '비트 세트 (theGrid [pixelY, 15 pixelX)처럼 적절한 비트를 비트 세트 수'과 'B1000000000000000 끝낼 B1110000000000000' –

+0

@ ddickson1 이것은 C 스타일의 쉬프트와 마스크로 대체 될 수 있습니다. 내 대답에 그것을 추가하겠습니다 ... – deviantfan

+0

고맙습니다. 그 코드에 대한 문서 페이지가 있습니까? –

관련 문제