Matematické Fórum


1. 8. 2026 (L) Fórum bude brzy uzavřeno 😿

Nejste přihlášen(a). Přihlásit

#1 30. 05. 2012 16:55

kotry
Příspěvky: 173
Reputace:   
 

Bitové operace

Ahoj, mám takový problém pořád se v tom nějak motám a nevím co stím...

mám definici

unsigned int i;

je v ní uložené libovolné číslo...
když chci znegovat bity 1 a 15 a ostatní nezměnit jde to udělat následovně... ?

i~((i&(1<<1))&&(i&((1<<15)));

a jak bych zjistil jestli je číslo záporné? (můžu použít ale jen bitové operace)

děkuji

Offline

 

#2 30. 05. 2012 21:09

cStP
Příspěvky: 39
Reputace:   
Web
 

Re: Bitové operace

Jestli je číslo záporné nebo kladné lze zjistit podle tzv. MSB (Most Significant Bit), tedy bitu který je nejvíc vlevo. Je-li jeho hodnota "0", pak je to číslo kladné, je-li nastaven na "1", pak jde o číslo záporné.

Offline

 

#3 30. 05. 2012 21:44

kotry
Příspěvky: 173
Reputace:   
 

Re: Bitové operace

jak by jsem to zapsal do kodu?

Offline

 

#4 30. 05. 2012 23:15

cStP
Příspěvky: 39
Reputace:   
Web
 

Re: Bitové operace

mělo by to fungovat snad takto:

    unsigned int i;

    if((i>>31 & 0x1) == 1)
        printf("zaporne\n");
    else
        printf("kladne\n");

Počítá to ale s tím, že int bude mít 32bitů. Posuneš tedy bity v čísle; MSB se tak dostane na 1. pozici a provedeš AND operaci s číslem jedna ("0x1"). Ta bude pravdivá jen jestliže bylo v obout číslech na 1. pozici číslice "1".

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson