Unabhängig von Arduino und maximal portierbar:
1 | #include <stdio.h>
|
2 | #include <stdint.h>
|
3 | #include <stdbool.h>
|
4 |
|
5 | int main()
|
6 | {
|
7 | uint8_t zahl=2;
|
8 | // uint16_t zahl=2;
|
9 | // uint32_t zahl=2147483647;
|
10 |
|
11 | int bits = sizeof(zahl)*8;
|
12 | for (int i=0; i<bits; i++)
|
13 | {
|
14 | bool msb = zahl & (1<<bits-1);
|
15 | putchar('0'+msb);
|
16 | zahl = zahl<<1;
|
17 | }
|
18 |
|
19 | putchar('\n');
|
20 | }
|
Alternativ, aber zumindest auf AVR vermutlich langsamer ist:
1 | for (int i=bits-1; i>=0; i--)
|
2 | {
|
3 | bool bit = zahl & (1<<i);
|
4 | putchar('0'+bit);
|
5 | }
|
Der Unterschied ist, dass der untere Code eine Shift-Operation mit
variabler Anzahl von Schritten enthält. Da AVR keinen Barrel-Shifter
haben, muss der C-Compiler dies durch eine innere Wiederholschleife
umsetzen.