Programovacie jazyky, rady, poradňa...
Tiestik
Amateur
Príspevky: 24 Registrovaný: 26 apr 2014, 18:49
Príspevok
od používateľa Tiestik » 31 máj 2014, 15:52
Caute prosim vas mozte mi niekto vysvetlit ako sa rataju bitove operatory & | ^
napr.
dakujem
harrison314
Hardcore addict
Príspevky: 8217 Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:
Príspevok
od používateľa harrison314 » 31 máj 2014, 16:09
1, prevdeis do dvojkovej sustavy
13= 1101 , 6 = 110
2, zarovnas
13 = 1101, 6 = 0110
3, pouzijes operator
& -and, | -or, ^ - exckuziv or
napr
1101 & 0110 = 0100
1101 | 0110 = 1111
1101^ 0110 = 1010
Tiestik
Amateur
Príspevky: 24 Registrovaný: 26 apr 2014, 18:49
Príspevok
od používateľa Tiestik » 31 máj 2014, 16:15
diky moc a nahodou v tom poslednom XOR 1101^ 0110 = nema to byt vysledok toto = 1011 ?
harrison314
Hardcore addict
Príspevky: 8217 Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:
Príspevok
od používateľa harrison314 » 31 máj 2014, 16:17
ano mala,
a este tie cisla treba previest naspet do desiatkovej sustavy, aby si videl vysledky
Tiestik
Amateur
Príspevky: 24 Registrovaný: 26 apr 2014, 18:49
Príspevok
od používateľa Tiestik » 31 máj 2014, 16:19
jop to viem uz
//autoeditácia príspevku (31 Máj 2014, 16:53)
Mozes mi pomoct este s jednym prikladom ze co vypise tento program nizsie ? skusal som to uz viacej krat ale neviem je spravne ze c je 0 ?
Kód: Vybrať všetko
int main()
{
unsigned a=5, b=4, c=0;
while (b != 0) {
if ((b & 1) != 0)
c = c + a;
a = a << 1;
b = b >> 1;
}
printf("%u\n", c);
return 0;
}
pcsiete
Medium Star
Príspevky: 413 Registrovaný: 07 dec 2012, 18:47
Príspevok
od používateľa pcsiete » 31 máj 2014, 17:17
Ak sa na to dobre pozerám, tak by to malo vypísať 20. Vyzerá to ako simulácia násobenia.
Tiestik
Amateur
Príspevky: 24 Registrovaný: 26 apr 2014, 18:49
Príspevok
od používateľa Tiestik » 31 máj 2014, 17:34
20 by to bolo keby tam bolo v podmienke == 0, nie ?
lebo tam v podmienke ze (b,cize 4 & 1) != 0, ked to vyratam tak vznikne 0 != 0 tym padom sa preskoci podmienka a v c sa nic nezmeni ?
a vypise sa 0 ?
hovorim to spravne
?
pcsiete
Medium Star
Príspevky: 413 Registrovaný: 07 dec 2012, 18:47
Príspevok
od používateľa pcsiete » 31 máj 2014, 18:06
nie. Pokým
b > 0 , ak je
n -tý bit
b nastavený, prirátaj
a<<n .
Je tu úplne rovnaké ako v 10tkovej sústave:
Kód: Vybrať všetko
a = 7435;
b = 8321;
c = a*b;
1. c = 7435*1;
2. c += 7435*2 * 10;
3. c += 7435*3 * 100;
4. c += 7435*8 * 1000;
Kód: Vybrať všetko
a = 21; //0b10111
b = 5; //0b0101
c = a*b;
1. c = 0b1 * 0b10111;
2. c += 0b0 * 0b10111 * 2;
3. c += 0b1 * 0b10111 * 4;
2. c += 0b0 * 0b10111 * 8;
Čiže povedzme že máme čísla
a a
n , medzivýsledok kroku je
c , poradie cifry je
n a sústava je
x . Potom je jeden krok:
V dvojkovej sústave v C-čku je to
Tiestik
Amateur
Príspevky: 24 Registrovaný: 26 apr 2014, 18:49
Príspevok
od používateľa Tiestik » 21 jún 2014, 18:29
Caute prosim vas moyte mi pomoct z jednym prikladom uz ho nevladzem ratat ;D ,tak keby ste mi niekto mohli povedat ze ktora odpoved je spravna a povedat aj preco
diky
je definovane makro:
#define CISLO(i) (1<<(i))
Ako vynulujeme prve 3 bity v cisle ulozenom v premennej x, pricom sa ostatne bity nezmenia?
Kód: Vybrať všetko
a) x &= ~ ( (~CISLO(1)) & (~CISLO(2)) & ~1);
b) x &= ~ (CISLO(1) | CISLO(2) | 1);
c) x |= ((~CISLO(0)) & (~CISLO(1)) & (~CISLO(2)) );
d) x &= ~( CISLO(0) | CISLO(1) | CISLO(2));
e) ziadna z odpovedi nie je spravna
pcsiete
Medium Star
Príspevky: 413 Registrovaný: 07 dec 2012, 18:47
Príspevok
od používateľa pcsiete » 21 jún 2014, 18:35
b) a d) vyzerajú byť rovnaké, ale možno som niečo prehliadol.
Makro
CISLO(i) nahradzuje
2^i , teda...
Kód: Vybrať všetko
//a)
x &= ~ ((~CISLO(1)) & (~CISLO(2)) & ~1);
x &= ~(~2 & ~4 & ~1);
x &= ~(-3 & -5 & -2);
x &= ~(-8);
x &= 7;
//b - vyzerá správne
x &= ~(CISLO(1) | CISLO(2) | 1);
x &= ~(2 | 4 | 1);
x &= ~7;
x &= -8;
//c
x |= ((~CISLO(0)) & (~CISLO(1)) & (~CISLO(2)) );
x |= (-1 & -2 & -4);
x |= -8;
//d - tiež vyzerá správne
x &= ~(CISLO(0) | CISLO(1) | CISLO(2));
x &= ~(1 | 2 | 4);
x &= ~7;
x &= -8;