Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: bitmaster am 24. April 2009, 13:08

Titel: C/C++ und Zahlensysteme
Beitrag von: bitmaster am 24. April 2009, 13:08
Hi,

ich möchte gerne einer Variable einen Wert zuweisen. Diesen möchte ich aber in binärer Schreibweise angeben. Also bei dezimaler und hexadezimaler würde man es ja so machen:

var = 0xBADC0DE; //hex
var = 195936478; //dez

Tjo in Assembler würde man an der Zahl ja einfach ein kleines b anhängen, aber in C scheint dies nicht zu funktionieren, da mein gcc meckert. Könnt ihr mir sagen wie das geht? Also klar könnte ich den Wert z.B. in hexadezimaler Form angeben und dahinter den Wert binär als Kommentar schreiben, aber wenn es direkt geht, wieso nicht?

thx

bitmaster
Titel: Re: C/C++ und Zahlensysteme
Beitrag von: matheguru am 24. April 2009, 14:42
Ich bin mir nicht ganz sicher schon ne lange weile nicht meht C geprogt. Aber meiner meinung nach ging das entweder mit 0% oder nur das % Zeichen, aber vieleicht verwechsle ich jetzt auch eine Sprache. Ich hoffe es funtzt!
Titel: Re: C/C++ und Zahlensysteme
Beitrag von: bitmaster am 24. April 2009, 15:34
Also wenn ich ein 0% davor mache, dann macht gcc eine Null daraus. Und wenn ich nur ein % davor mache, dann meckert gcc.

hmm...
Titel: Re: C/C++ und Zahlensysteme
Beitrag von: bluecode am 24. April 2009, 15:37
Es geht nicht in C/C++. Maximal noch oktal durch voranstellen einer 0.

% ist der Modulo-Operator, d.h. der Rest einer ganzzahligen Division und hat zwei Operanden, insofern ist das von matheguru schon syntaktisch komplett kaputt.
Titel: Re: C/C++ und Zahlensysteme
Beitrag von: bitmaster am 24. April 2009, 16:07
Es geht nicht in C/C++.Hm... ok, schade. Wäre ja mal was, womit man C/C++ einwenig auffrischen könnte.  :wink:

bitmaster
Titel: Re: C/C++ und Zahlensysteme
Beitrag von: matheguru am 24. April 2009, 16:13
ja ihr habt recht hatte ich vergessen sry bitmaster für die Hoffnungen die ich dir gemacht habe, na ja ist wirklich ergerlich, dass das net geht, höchstens wenn man eine Klasse dafür macht einen neuen Dateintyp erstellt und funktionen schreibt mit inlineasm o. man versucht das ganze über bitmanipulation. Na ja sry noch mal hatte mich halt versehen.
Titel: Re: C/C++ und Zahlensysteme
Beitrag von: bluecode am 24. April 2009, 16:31
[...] höchstens wenn man eine Klasse dafür macht einen neuen Dateintyp erstellt und funktionen schreibt mit inlineasm o.[...]
Auch das geht nicht. Zumindest nicht (annährend) mit der gewünschten Syntax (und ohne den Compiler zu verändern).

Zitat
Wäre ja mal was, womit man C/C++ einwenig auffrischen könnte.
C/C++ hat andere Probleme mit denen sich das ISO Comitee befasst bzw. befassen sollte.
Titel: Re: C/C++ und Zahlensysteme
Beitrag von: Jidder am 24. April 2009, 18:37
Wenn numerische Konstanten in binärer Schreibweise denen in hexadezimaler Schreibweise vorzuziehen sind, ist eh was kaputt am Code.
Titel: Re: C/C++ und Zahlensysteme
Beitrag von: kevin am 24. April 2009, 20:13
gcc kann 0b mittlerweile, wenn ich mich nicht täusche. Dürfte mit 4.3 dazugekommen sein.
Titel: Re: C/C++ und Zahlensysteme
Beitrag von: bluecode am 24. April 2009, 20:28
Zitat
#  Integer constants written in binary are now supported as a GCC extension. They consist of a prefix 0b or 0B, followed by a sequence of 0 and 1 digits.
aus den gcc 4.3 changes (http://gcc.gnu.org/gcc-4.3/changes.html)

Wobei diese Erweiterung nur im Modus -std=gnu89 (das ist der default) und -std=gnu99 verfügbar ist.
Titel: Re: C/C++ und Zahlensysteme
Beitrag von: kevin am 24. April 2009, 20:33
Die Compilerunabhängigkeit hat man eh verloren, wenn man zum ersten Mal ein asm in seinen Code reinbastelt. Nachdem das bei einem Kernel ab und zu passieren soll, machen die restlichen gcc-Erweiterungen dann auch nicht mehr viel aus. ;)
Titel: Re: C/C++ und Zahlensysteme
Beitrag von: bluecode am 24. April 2009, 20:37
Ich verwende trotzdem für alles -std=c99 bzw. -std=c++0x.
Titel: Re: C/C++ und Zahlensysteme
Beitrag von: bitmaster am 24. April 2009, 22:24
Wenn numerische Konstanten in binärer Schreibweise denen in hexadezimaler Schreibweise vorzuziehen sind, ist eh was kaputt am Code.
Nö, nur gibt es manchmal Bits, die eine gewisse Bedeutung haben. Deshalb sieht eine binäre Schreibweise manchmal deutlicher aus. Aber OK, man kann ja in Kommentaren dahinter schreiben was welches Bit bewirkt.

bitmaster
Titel: Re: C/C++ und Zahlensysteme
Beitrag von: bluecode am 24. April 2009, 22:58
Meistens nimmt man aber lieber (object-like) Makros oder enums. Dann hat man Namen statt Nummern. :wink:
Titel: Re: C/C++ und Zahlensysteme
Beitrag von: bitmaster am 25. April 2009, 07:30
Meistens nimmt man aber lieber (object-like) Makros oder enums. Dann hat man Namen statt Nummern. :wink:
Aber bei manchen Sachen hat man einfach keine Lust sich so viele Namen auszudenken. :-P

Nee, stimmmt schon. Du meinst sicher:

var = CONST1 or COST2 or CONST3;
Nun ja, aber da bin ich dann doch im Moment ein wenig zu faul für. Aber im Grunde hast du schon recht.

bitmaster
Titel: Re: C/C++ und Zahlensysteme
Beitrag von: bluecode am 25. April 2009, 11:15
Also ich kann nur empfehlen, dass so zu machen, va. wenn es sich um die Kernel <-> Prozesse Schnittstelle handelt: Da würde ich das ganze in extra Headerdateien (ich hab das bei mir einfach mal in einen Unterordner libkernel (http://repo.or.cz/w/lightOS.git?a=tree;f=libkernel;hb=HEAD) gepackt, die Sourcecodedateien werden nur in den Userspace gelinkt) schreiben und die jeweils von Prozess bzw. von Kernel Seite inkludieren. Da sparst du dir dann Arbeit. Nicht nur Arbeit im Sinne von du musst die Defines nur einmal machen, sondern auch Arbeit im Sinne von es entstehen keine (schwer zu debuggenden) Bugs indem du irgendwas an der Schnittstelle nur im Kernel aber nicht im Userspace abgeändert hast.