Forum » Programiranje » Logične operacije z biti (težka naloga)
Logične operacije z biti (težka naloga)
marjan_h ::
Zanima me kako bi v dvojiškem številskem sestavu za neko število postavil recimo bita z indeksom 4 in 3 na 0?
Na voljo imam samo logične operacije and, or in odštevanje seštevanje.
Potrebujem samo algoritem v slovenščini in ne celotne sprogramirane stvari.
Hvala za pomoč
Na voljo imam samo logične operacije and, or in odštevanje seštevanje.
Potrebujem samo algoritem v slovenščini in ne celotne sprogramirane stvari.
Hvala za pomoč
FrEaKmAn ::
če prav razumem
torej postaviti tretji bit na 0 (če gremo bit 0, bit 1, bit 2...). začnemo z
prišteješ 247 (11110111) in dobiš
potem pa rečeš AND
torej smo 4 bit postaviti na nič
verjetno bi se dalo naresti tudi boljše, neki na hitro iz glave...
00101100
torej postaviti tretji bit na 0 (če gremo bit 0, bit 1, bit 2...). začnemo z
00000000
prišteješ 247 (11110111) in dobiš
11110111
potem pa rečeš AND
00101100 11110111 -------- 00100100
torej smo 4 bit postaviti na nič
verjetno bi se dalo naresti tudi boljše, neki na hitro iz glave...
Zgodovina sprememb…
- spremenil: FrEaKmAn ()
darkkk ::
Načeloma (vsaj kar sem jaz to počel), take stvari počneš z "maskami", npr, če hočeš MSB postavit na 1, ostalo pa na nič, maš pa 8bitni zapis, pol npr:
01010101 - tvoje št.
OR (| v c/c++)
10000000 - maska
Kar pride še prav:
XOR z 1111...11 = negacija tvojih bitov (lahko tudi XOR z 00000000)
AND z 111111111 = identična preslikava
Itd.
01010101 - tvoje št.
OR (| v c/c++)
10000000 - maska
Kar pride še prav:
XOR z 1111...11 = negacija tvojih bitov (lahko tudi XOR z 00000000)
AND z 111111111 = identična preslikava
Itd.
marjan_h ::
@darkk
sedaj sem pravzprav opazil, da pri OR nimaš prav. Če hočeš MSB na 1 potem bo OR vrnilo 1 to je res. Vendar pri ostalih bitih recimo pri 0 bo vrnilo 1, in ne 0.
sedaj sem pravzprav opazil, da pri OR nimaš prav. Če hočeš MSB na 1 potem bo OR vrnilo 1 to je res. Vendar pri ostalih bitih recimo pri 0 bo vrnilo 1, in ne 0.
Andreij ::
Zanima me kako bi v dvojiškem številskem sestavu za neko število postavil recimo bita z indeksom 4 in 3 na 0?
Na voljo imam samo logične operacije and, or in odštevanje seštevanje.
Potrebujem samo algoritem v slovenščini in ne celotne sprogramirane stvari.
Hvala za pomoč
Kaj boš pa s tem ? To se potrebuje notranje v programskih knjižicah ko se kombinirajo strukturne vrednosti ali kaj podobnega kjer programer sploh to ne potrebuje znati.
Enostaven primer kjer dobiš 0:
int WIN_BIT = 0x4;
int INT_BIN = 0x8;
int Val = WIN_BIT & INT_BIN; // 0
MrBrdo ::
Če uporabljaš GCC lahko maske tudi takole napišeš:
V tem primeru bi postavil 3tji in 6ti bit na 0. Najbolj pogosto pa se maske dajo v hex obliki.
nekaj & 0b11011011
V tem primeru bi postavil 3tji in 6ti bit na 0. Najbolj pogosto pa se maske dajo v hex obliki.
MrBrdo
Spura ::
Jst sm mislu da bodo kake finte fore k sm odpiral temo, ne pa navaden bit masking.
mask -> vrednost ki ima bite 1 na mestih ki nas zanimajo
v & mask != 0 -> preveri ce je vsaj en bit postavljen
v & mask == mask -> preveri ce so vsi biti postavljeni
v | mask -> nastavi bite
v xor mask -> spremeni bite v kontra
v & neg(mask) -> zbrisi bite
ce nimas operacije bitne negacije in imas signed vrednost je negirana vrednost -v - 1
XOR z 0 ne spremeni nicesar.
mask -> vrednost ki ima bite 1 na mestih ki nas zanimajo
v & mask != 0 -> preveri ce je vsaj en bit postavljen
v & mask == mask -> preveri ce so vsi biti postavljeni
v | mask -> nastavi bite
v xor mask -> spremeni bite v kontra
v & neg(mask) -> zbrisi bite
ce nimas operacije bitne negacije in imas signed vrednost je negirana vrednost -v - 1
Kar pride še prav:
XOR z 1111...11 = negacija tvojih bitov (lahko tudi XOR z 00000000)
XOR z 0 ne spremeni nicesar.
Zgodovina sprememb…
- spremenil: Spura ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Generiranje CRC-jaOddelek: Programiranje | 1099 (898) | kriko1 |
» | Program v C - nujnoOddelek: Programiranje | 1940 (1615) | Ktj |
» | PIC 16f84A - utripanjeOddelek: Elektrotehnika in elektronika | 2199 (1999) | ql000 |
» | [C] bitni operator (strani: 1 2 3 )Oddelek: Programiranje | 5500 (4333) | Thomas |
» | Funkcija z logičnimi operaterji.... (strani: 1 2 )Oddelek: Programiranje | 5471 (4817) | CaqKa |