Integer als Binärzahl initialisieren

Hallo,

darf/ kann man das so schreiben:

int big_value = B0001000100000011;

Falls nicht, wie schreibt man das, wenn man big_value binär angeben möchte?

Gruß Chris

Diese Große Biniäranweisung nimmt die Arduino IDE nicht sonden nur bis max 8 Stellen.
Du kannst das mit HighByte und Lowbyte machen:
http://arduino.cc/en/Reference/HighByte
http://arduino.cc/en/Reference/LowByte

Deklaration kannst du auch so machen

HBBig=B00010001
LBBig=B00000011  // wobei man führende Nullen weglassen kann

int big_value = HBBig<<8 || LBBig;

Gruß
Der Dani

Du kannst auch Hex mit dem 0x Präfix schreiben. Das ist Standard C und geht auch mit größeren Zahlen

Klar 0x1103 ist das gleiche wie B0001000100000011 aber es ist dann nicht binär

Gruß Der dani

Es ist aber relativ leicht als Binär-Zahl lesbar. Jede Hex-Ziffer entspricht 4 Bit.

Oder so:

int big_value = B00010001<<8 | B00000011  ;

Sieht aber nicht besonders hübsch aus :wink:

Hübscher geht es aber scheinbar nicht, oder?

Ich möchte halt mögl. effektiv etwas mehr als acht Zustände speichern und dabei sehr wenig Speicherplatz belegen.

Dachte da dann halt an ein Int, welches ich mir binär anzeigen lasse.

Gruß Chris

Von speicherplatz ist es immer egal - der Compiler bastelt dir deine Dezimal und Hexadezimalzahlen eh in Binärwerte um - der Microcontroller bekommt das gar nicht mit.

Du könntest die verschiedenen Werte aber einfach in Sektionen a 8-Bit unterteilen. Das haut dir natürlich den Speicher rauf...

volvodani:

int big_value = HBBig<<8 || LBBig;

Übrigens falsch. || ist das logische Oder. Dabei kommt immer 1 raus, solange beide Zahlen ungleich 0 sind. Das bitweise Oder hat nur einen Strich

Stimmt :) War mir nicht mehr ganz sicher...

EDIT: Ich würde es auf diese Weise machen (allerdings noch nicht ausprobiert)

#define LED1  0x01
#define LED2  0x02
#define LED3  0x04
#define LED4  0x08
[...]

void setup()
{
  int variable = 0;
  variable |= (LED1 | LED2 | LED3 | LED4); // etc etc

}

Chris72622: Hübscher geht es aber scheinbar nicht, oder?

Im Quellcode geht immer das Prefix "0b" bzw. "0B".

Also so ist es korrekt wenn Du längere Binärdarstellungen im Quellcode haben möchtest:

int big_value = 0B0001000100000011;
oder
int big_value = 0b0001000100000011;

Perfekt.

int long_01 = B0000010011010011;

..geht also nicht, dafür aber..

int long_01 = 0b0000010011010011;

Cool.

Danke!

Chris72622: int long_01 = B0000010011010011;

..geht also nicht, dafür aber..

int long_01 = 0b0000010011010011;

Das liegt daran, dass 0b... so ähnlich wie 0x... vom Compiler als Zahl ausgewertet wird, B... aber sind 256 verschiedene #define Konstanten. Und 65tausend solcher Konstanten zu definieren war noch keiner fleissig genug ...

Und du wirst bald merken, dass hex Darstellung bei größeren Zahlen sogar leichter lesbar ist ;)