Pages: [1]   Go Down
Author Topic: Integer als Binärzahl initialisieren  (Read 217 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
God Member
*****
Karma: 2
Posts: 530
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

darf/ kann man das so schreiben:

Code:
int big_value = B0001000100000011;

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

Gruß Chris
Logged


AREA COLOGNE
Offline Offline
Edison Member
*
Karma: 15
Posts: 1065
I am 1 of 10 who understands binary
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:

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

int big_value = HBBig<<8 || LBBig;


Gruß
Der Dani
Logged

So ist das Leben:
Manchmal bis du das Denkmal, manchmal die Taube!

Offline Offline
Faraday Member
**
Karma: 79
Posts: 2713
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

AREA COLOGNE
Offline Offline
Edison Member
*
Karma: 15
Posts: 1065
I am 1 of 10 who understands binary
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Gruß
Der dani
Logged

So ist das Leben:
Manchmal bis du das Denkmal, manchmal die Taube!

Offline Offline
Faraday Member
**
Karma: 79
Posts: 2713
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
God Member
*****
Karma: 9
Posts: 721
42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Oder so:

Code:
int big_value = B00010001<<8 | B00000011  ;

Sieht aber nicht besonders hübsch aus smiley-wink
« Last Edit: February 07, 2014, 02:12:15 pm by Marcus W » Logged


Offline Offline
God Member
*****
Karma: 2
Posts: 530
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged


Offline Offline
God Member
*****
Karma: 9
Posts: 721
42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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...
« Last Edit: February 07, 2014, 02:09:31 pm by Marcus W » Logged


Offline Offline
Faraday Member
**
Karma: 79
Posts: 2713
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
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
Logged

Offline Offline
God Member
*****
Karma: 9
Posts: 721
42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Stimmt smiley War mir nicht mehr ganz sicher...


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

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

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

}
« Last Edit: February 07, 2014, 02:24:24 pm by Marcus W » Logged


Germany S-H
Offline Offline
Edison Member
*
Karma: 117
Posts: 2435
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
int big_value = 0B0001000100000011;
oder
int big_value = 0b0001000100000011;
Logged

Offline Offline
God Member
*****
Karma: 2
Posts: 530
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Perfekt.

Code:
int long_01 = B0000010011010011;

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

Code:
int long_01 = 0b0000010011010011;

Cool.

Danke!
« Last Edit: February 07, 2014, 03:59:19 pm by Chris72622 » Logged


Germany
Offline Offline
Faraday Member
**
Karma: 49
Posts: 2723
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
int long_01 = B0000010011010011;
..geht also nicht, dafür aber..
Code:
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 smiley-wink
Logged

Pages: [1]   Go Up
Jump to: