» »

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č

FrEaKmAn ::

če prav razumem

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 ()

marjan_h ::

zelo inteligentna rešitev, hvala.

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.

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.

TEDY ::

@DirectX11
darkkk ima prav

marjan_h ::

aja pa res, narobe sem gledal. :D

Andreij ::

marjan_h je izjavil:

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š:

nekaj & 0b11011011

V tem primeru bi postavil 3tji in 6ti bit na 0. Najbolj pogosto pa se maske dajo v hex obliki.
MrBrdo

Spura ::

(težka naloga)
Please please tell me you're kidding.

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

darkkk je izjavil:


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 ()

marjan_h ::

Ja, dejansko sedaj vidim da je kar lahka stvar, pred 3 mesci se mi je pa zdelo težko.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Generiranje CRC-ja

Oddelek: Programiranje
71107 (906) kriko1
»

Program v C - nujno

Oddelek: Programiranje
171958 (1633) Ktj
»

PIC 16f84A - utripanje

Oddelek: Elektrotehnika in elektronika
222217 (2017) ql000
»

[C] bitni operator (strani: 1 2 3 )

Oddelek: Programiranje
1125540 (4373) Thomas
»

Funkcija z logičnimi operaterji.... (strani: 1 2 )

Oddelek: Programiranje
905513 (4859) CaqKa

Več podobnih tem