Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

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