目的
8ビットの上位、下位を逆転して遊ぶ
3回シフトする方法を選択
ビットリバースと言うらしい。
ビット順序反転
(逆転再生の逆転)
1回目 ABCD EFGH -> EFGH ABCD
2回目 EFGH ABCD -> GHEF CDAB
3回目 GHEF CDAB -> HGFE DCBA
オンラインコンパイラ
#include <iostream>
using namespace std;
int main(void){
// Your code here!
int x=0b10000000;
printf("[%02x]\n",x);
x=(x >> 4) | ( (x & 0x0f) << 4 );
printf("[%02x]\n",x);
x=((x & 0b11001100) >> 2) | ( (x & 0b00110011) << 2 );
printf("[%02x]\n",x);
x=((x & 0b10101010) >> 1) | ( (x & 0b01010101) << 1 );
printf("[%02x]\n",x);
}
結果
[80]
[08]
[02]
[01]
arduino
結果
プログラム
//0bABCD EFGH -> 0bHGFE DCBA
//0bABCD_EFGH__0bHGFE_DCBA_UNO_1
// the setup routine runs once when you press reset:
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
}
// the loop routine runs over and over again forever:
void loop() {
int x = 0b10000000;
// print out the value:
Serial.println(x, HEX);
x = (x >> 4) | ( (x & 0x0f) << 4 );
// print out the value:
Serial.println(x, HEX);
x = ((x & 0b11001100) >> 2) | ( (x & 0b00110011) << 2 );
// print out the value:
Serial.println(x, HEX);
x = ((x & 0b10101010) >> 1) | ( (x & 0b01010101) << 1 );
// print out the value:
Serial.println(x, HEX);
delay(1000); // delay in between reads for stability
}