short, long, int variablen zerlegen

  • Themenstarter Themenstarter user1234user
  • Beginndatum Beginndatum
U

user1234user

hallo

ich müsste eine short variable zerlegen
in dieser variable steht folgendes
10000000h
ich brauche allerdings nur den 1er also das msb um dieses nachher als lsb in eine andere
short variable zusammenzufügen
 
Hallo,

also aus der Zahlenangabe "10000000h" werde ich nicht ganz schlau, ist das die binäre Darstellung?
Ansonsten:
C++:
short x1 = 0x8000;
short x2 = (x1 & 0xFF00) >> 8;
Gruß
MCoder
 
Hi,

eine kleine Anmerkung: das Suffix "h" steht für Hexdezimal. Wenn du es Binär angibst, steht dort ein "b".

Gruß
BK
 
ja war ein versehen war natürlich 10000000b gemeint
ich möchte alle stellen hinter dem 1er "wegschneiden" damit ich den 1er mit einer anderen short variable zusammenfügen kann

short var1 = 10001101b

short var2 = 10000000b

var3 soll var1 + msb von var2(also in diesem fall der 1er) enthalten
wie kann ich das realisieren
 
stimmt danke ich hab immer so kompliziert gedacht
aber so ist es natürlich super einfach
danke vielmals

mfg
 
Deine unvollständige binäre Darstellung ist etwas mehrdeutig; du verwendest nur 8 Bit statt 16.
Wenn du Bit 15, das Vorzeichenbit, haben willst, musst du einfach nur auf <0 abfragen. Beim Shiften musst du aufpassen, ob du ein short oder ein unsigned short hast. Bei einem normalen, also vorzeichenbehafteten short wird ein arithmetisches Shift mit Vorzeichenerweiterung durchgeführt, bei dem das Vorzeichenbit erhalten bleibt. Bei einem unsigned short wird das Vorzeichenbit dagegen auf 0 gesetzt. Wegen dieser Problematik musst du also eventuell ein short in einen unsigned short umwandeln. Das Umwandeln in ein char-Array ist nicht zu empfehlen, da die Reihenfolge, in der die Bytes für ein short abgelegt werden, maschinenabhängig ist. Das folgende Progrämmchen soll dir einen kleinen Einblick in die Problematik verschaffen, und dir ein erster Hinweis auf die Möglichkeiten sein, wie diese Schwierigkeiten umschifft werden können.

C:
int main()
{
    printf("sizeof(double): %d\n",sizeof(double));
    printf("sizeof(int   ): %d\n",sizeof(int   ));
    printf("sizeof(short ): %d\n",sizeof(short ));
    short s = 1<<15;
    printf("s: %d\n",s);
    s >>= 4;
    printf("s: %d\n",s);
    union {
        short s;
        unsigned char c[sizeof(short)];
        unsigned short us;
    } u;
    u.s = 1<<7;
    printf("s: %d\n",u.s);
    printf("b: %02x %d\n",u.c[0],u.c[0]);
    printf("b: %02x %d\n",u.c[sizeof(short)-1],u.c[sizeof(short)-1]);
    u.s = 1<<15;
    printf("s: %d %u\n",u.s,u.s);
    u.s >>= 8;
    printf("s: %d %u\n",u.s,u.s);
    u.s = 1<<15;
    printf("s: %d %u\n",u.s,u.s);
    u.us >>= 8;
    printf("s: %d %u\n",u.s,u.s);

    return 0;
}
 
ja war ein versehen war natürlich 10000000b gemeint
ich möchte alle stellen hinter dem 1er "wegschneiden" damit ich den 1er mit einer anderen short variable zusammenfügen kann

short var1 = 10001101b

short var2 = 10000000b

var3 soll var1 + msb von var2(also in diesem fall der 1er) enthalten
wie kann ich das realisieren

Die sauberste Lösung ist wahrscheinlich:

C:
var3  = var1;
var3 |= var2 & (0x01<<(8*sizeof(short)-1));
 
Moin,

@user1234user :
es bringt hier im Allgemeinen nur wenig, das gleiche Thema (wenn auch etwas anders verpackt) in einem zweiten Thema erneut zu posten ....
und dann noch mit zwei zwar verschiedenen, aber doch arg ähnlichen Gast-Logins ;-]

Warum meldest Du Dich nicht ganz offiziell (mit EINEM Login) an:confused:
Das steigert die Lust, Dir zu helfen, gegenüber Deiner Vorgehensweise ganz ungemein :p

Nix für ungut!

Gruß
Klaus

man vgl. http://www.tutorials.de/forum/c-c/360630-2-short-variablen-zusammenfuegen.html#post1868825
 
Zuletzt bearbeitet:
Zurück