こんにちは。NoMaYです。CC-RXで 0b10101010 のような表記が出来るようにするマクロが思い浮かんだので投稿しておきます。こんな感じで使います。(ネットのどこかに同じか同様のものがあるでしょうけれども、、、) val = B8_(0b10101010); val = B4_(0b1010);以下、ソースです。sim_rx130_bin_number.c
#include <stdint.h> #include <machine.h> #define B_Helper(bin, bit) (((0x##bin) >> ((4 * (bit)) - (bit))) & (1 << (bit))) #define B4_(bin) (\ B_Helper(bin, 0) |\ B_Helper(bin, 1) |\ B_Helper(bin, 2) |\ B_Helper(bin, 3) ) #define B8_(bin) (\ B_Helper(bin, 0) |\ B_Helper(bin, 1) |\ B_Helper(bin, 2) |\ B_Helper(bin, 3) |\ B_Helper(bin, 4) |\ B_Helper(bin, 5) |\ B_Helper(bin, 6) |\ B_Helper(bin, 7) ) uint32_t val; void main(void) { val = B4_(0b0000); nop(); val = B4_(0b0001); nop(); val = B4_(0b0101); nop(); val = B4_(0b1010); nop(); val = B4_(0b1110); nop(); val = B4_(0b1111); nop(); val = B8_(0b00000000); nop(); val = B8_(0b00000001); nop(); val = B8_(0b01010101); nop(); val = B8_(0b10101010); nop(); val = B8_(0b11111110); nop(); val = B8_(0b11111111); nop(); }
こんにちは。NoMaYです。もっと早くに気付けば良かったのですが、このマクロは16bit長では使えないですね。でも、16bit長までなら、以下のようにすれば使えます。ですが、32bit長は無理ですね。16bit長までなら
#define B_Helper(bin, bit) ((((uint64_t)0x##bin) >> ((4 * (bit)) - (bit))) & (1 << (bit)))#define B16_(bin) (\ B_Helper(bin, 0) |\ B_Helper(bin, 1) |\ B_Helper(bin, 2) |\ B_Helper(bin, 3) |\ B_Helper(bin, 4) |\ B_Helper(bin, 5) |\ B_Helper(bin, 6) |\ B_Helper(bin, 7) |\ B_Helper(bin, 8) |\ B_Helper(bin, 9) |\ B_Helper(bin, 10) |\ B_Helper(bin, 11) |\ B_Helper(bin, 12) |\ B_Helper(bin, 13) |\ B_Helper(bin, 14) |\ B_Helper(bin, 15) ) val = B16_(0000000000000000); val = B16_(0000000000000001); val = B16_(0101010101010101); val = B16_(1010101010101010); val = B16_(1111111111111110); val = B16_(1111111111111111);