Arduino: Formatierung von Binärzahl

Gast #6953448
Lesenswert?

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.
Gast #6953561
Lesenswert?

Veit D. schrieb:
> aber das läuft vermutlich nur auf dem PC, oder?

In der Tat habe ich das Programm nur auf einem Laptop getestet. Für 
serielle/usb Ausgaben musst du bei Arduino die Methoden der Serial 
Klasse benutzen, anstatt putchar().

Für serielle Ausgabe auf AVR Mikrocontroller ohne Arduino Framework habe 
ich ein Beispiel: http://stefanfrings.de/avr_hello_world/index.html

> Unabhängig bedeutet doch läuft überall?

Das "unabhängig" bezog sich auf den Algorithmus.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren