PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Byte Bitweise ausgeben? in C - wie gehts?


C_
2004-12-13, 20:38:21
ja und das ist auch schon mein problem, ich möchte ein byte bitweise ausgeben
lassen, wie ist sowas unter c möglich ?

danke fürs lesen und mühe

C


p.s. eigentlich sollte es egal sein welchen typ - aber ich will ein int 4byte lang ausgeben lassen

loOsAa
2004-12-13, 20:59:59
unisgned int zahl;

for (int i=0; i < 32; i++)
{
if( (zahl >> i) & 1 )
printf("1");
else
printf("0");
}



oder


unisgned int zahl;

for (int i=0; i < 32; i++)
{
if( (zahl << i) & 0x80000000 )
printf("1");
else
printf("0");
}



hm, letzes wäre eigentlich richtiger. Hasst du das gemeint?

EDIT: oh sry, das war für 4byte. für ein byte anstatt 32 8 und anstatt 0x80000000 0x80 und anstatt unsigned int unsigned char.

EDIT2: ja, genau. erstes für big endian und zweites für little endian (also für PC halt)

C_
2004-12-13, 21:07:25
danke genau das habe ich gemeint :)


jetzt steht der low/big-endian erkennung nichts mehr im wege ;)

C_

Trap
2004-12-13, 21:55:34
Allgemein:

void printinbase(int num, int base)
{
int rest = num % base;
int div = num/base;
if(div)
printinbase(div,base);
printf("%x",rest);
}

anfänger
2004-12-13, 22:08:49
Allgemein:

void printinbase(int num, int base)
{
int rest = num % base;
int div = num/base;
if(div)
printinbase(div,base);
printf("%x",rest);
}

? könntest du das etwas kommentieren ? versteh nicht worauf das hinausläuft...

sry anfänger

Trap
2004-12-13, 22:19:12
Man teilt durch die Basis bis 0 rauskommt, merkt sich dabei die Reste und gibt die Reste rückwärts aus.

Xmas
2004-12-14, 03:15:19
EDIT2: ja, genau. erstes für big endian und zweites für little endian (also für PC halt)
Ich glaube du verwechselst da was. Im ersten Fall gibst du die Binärzahl rückwärts (beim niederwertigsten Bit links beginnend) aus, im zweiten Fall vorwärts (wie man eben normalerweise Zahlen schreibt).

Das hat aber nichts mit big/little endian zu tun. Endianness bezieht sich nur darauf in welcher Reihenfolge die einzelnen Bytes eines Multibyte-Datenwortes im Speicher abgelegt werden.
Solange man nicht mit Pointern oder unions hantiert bzw. Daten zwischen verschiedenen Systemen austauscht, kommt man mit dem Endian-Problem gar nicht in Berührung.

Gast
2004-12-14, 07:22:21
Ich glaube du verwechselst da was. Im ersten Fall gibst du die Binärzahl rückwärts (beim niederwertigsten Bit links beginnend) aus, im zweiten Fall vorwärts (wie man eben normalerweise Zahlen schreibt).

Das hat aber nichts mit big/little endian zu tun. Endianness bezieht sich nur darauf in welcher Reihenfolge die einzelnen Bytes eines Multibyte-Datenwortes im Speicher abgelegt werden.
Solange man nicht mit Pointern oder unions hantiert bzw. Daten zwischen verschiedenen Systemen austauscht, kommt man mit dem Endian-Problem gar nicht in Berührung.

hm, es heisst zwar Byteorder aber laut dieser (http://www.webopedia.com/TERM/b/big_endian.html) Beschreibung sind das eigentlich die Bits die Endianness ausmachen. Oder irre ich mich?

loOsAa
2004-12-14, 07:23:28
sry, das war ich gerade

Legolas
2004-12-14, 11:29:32
hm, es heisst zwar Byteorder aber laut dieser (http://www.webopedia.com/TERM/b/big_endian.html) Beschreibung sind das eigentlich die Bits die Endianness ausmachen. Oder irre ich mich?
Nein, Little und Big Endian beziehen sich darauf, wie die einzelnen Bytes im Speicher abgelegt werden. Die kleinste direkt im Speicher adressierbare Einheit ist ein Byte. Wie die Bits in diesem Byte abgelegt werden ist für die CPU vollständig transparent, da die CPU im Endeffekt einfach das Byte anfordert, und dann dieses auch so bekommt, wie sie es vorher abgelegt hat. Der Unterschied zwischen Little und Big Endian ist also nicht die Reihenfolge der Bits in den Bytes, sondern der Bytes bei Datentypen, die größer als ein Byte sind.