Go Down

Topic: Integer als Binärzahl initialisieren (Read 442 times) previous topic - next topic

Chris72622

Hallo,

darf/ kann man das so schreiben:

Code: [Select]
int big_value = B0001000100000011;

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

Gruß Chris
https://github.com/jeffThompson/DarkArduinoTheme

volvodani

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
Code: [Select]


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

int big_value = HBBig<<8 || LBBig;



Gruß
Der Dani
So ist das Leben:
Manchmal bis du das Denkmal, manchmal die Taube!

Serenifly

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

volvodani

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

Gruß
Der dani
So ist das Leben:
Manchmal bis du das Denkmal, manchmal die Taube!

Serenifly

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

Marcus W

#5
Feb 07, 2014, 08:03 pm Last Edit: Feb 07, 2014, 08:12 pm by Marcus W Reason: 1
Oder so:

Code: [Select]

int big_value = B00010001<<8 | B00000011  ;


Sieht aber nicht besonders hübsch aus ;)

Chris72622

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
https://github.com/jeffThompson/DarkArduinoTheme

Marcus W

#7
Feb 07, 2014, 08:07 pm Last Edit: Feb 07, 2014, 08:09 pm by Marcus W Reason: 1
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...

Serenifly


Code: [Select]
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

Marcus W

#9
Feb 07, 2014, 08:19 pm Last Edit: Feb 07, 2014, 08:24 pm by Marcus W Reason: 1
Stimmt :) War mir nicht mehr ganz sicher...


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

Code: [Select]

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

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

}

jurs


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:
Code: [Select]

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

Chris72622

#11
Feb 07, 2014, 08:52 pm Last Edit: Feb 07, 2014, 09:59 pm by Chris72622 Reason: 1
Perfekt.

Code: [Select]
int long_01 = B0000010011010011;

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

Code: [Select]
int long_01 = 0b0000010011010011;

Cool.

Danke!
https://github.com/jeffThompson/DarkArduinoTheme

michael_x


Code: [Select]
int long_01 = B0000010011010011;
..geht also nicht, dafür aber..
Code: [Select]
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 ;)

Go Up