Co znamena tento kod v Cecku

Od: Datum: 01.02.13 07:26 odpovědí: 12 změna: 01.02.13 21:30

Dobry den,

mohl by mi prosim nekdo vysvetlit co znamena tato operace v jazyku C?

x = (1 << 7);


Seznam odpovědí:
 
moment čekejte prosím, probíhá přenos dat...
Zobrazení struktury odpovědí v otázce
Skrytí struktury odpovědí v otázce
Zobrazení struktury odpovědí v otázce

 

Odpovědi na otázku:
Od: luke237
Datum: 01.02.13 07:48
Jednicka posunuta o 7 bitu doleva. Vyjde tak cislo 128.
Ohodnoceno: 0x
 
Od: luke237
Datum: 01.02.13 07:50
Ohodnoceno: 0x
 
Od: luke237
Datum: 01.02.13 08:02
Oprava odkazu: Operators in C and C++
Ohodnoceno: 0x
 
Datum: 01.02.13 07:50
avatar

<< je left shift, první číslo se ve dvojkové soustavě posune o [druhé číslo] bitů doleva a zprava se doplní nulama.

0000 0001, výsledek 1000 0000

V podstatě taky vynásobení x2^7 (pokud se to tam vejde a nezačnou čísla zleva odpadávat). Více viz bitwise operátory.

Ohodnoceno: 0x
 
Od: molouch
Datum: 01.02.13 07:52

A kdyby to bylo naopak:

x = (1 >> 7);

Od: luke237
Datum: 01.02.13 08:13
Je to trosku slozitejsi (Wikipedie).
Nejpravdepodobne se ti bude zleva nasouvat MSB, tedy v tomto pripade nula, takze vysledek po sedmi posunech bude nula.
Ohodnoceno: 0x
 
Od: molouch
Datum: 01.02.13 13:08

A co tento kod?

x = ((0x7<<24)|(0x1<<16));

Od: molouch
Datum: 01.02.13 13:43

Kdyz to rozpytvam:

x = ((0x7<<24)|(0x1<<16));

(0x7<<24) = (0b111 << 24) = 111000000000000000000000000

(0x1<<16) = (0b1 << 16) = 10000000000000000

Bitova operace OR

Vysledek je 111000000001000000000000000

Je to tak?

Od: hm®
Datum: 01.02.13 14:13
avatar

Ty nuly jsem nepočítal, ale postup vypadá správně.

Ohodnoceno: 0x
 
Od: luke237
Datum: 01.02.13 20:07
Taky se mi nechce ty nuly pocitat, takze si to prolitneme v hexa *smich*:
0x7<<24 = 0x7000
0x1<<16 = 0x0100
br>secteno, podtrzeno: 0x7100 *smich*
Ohodnoceno: 0x
 
Od: luke237
Datum: 01.02.13 20:11
Kdyz tech 0x7100 prevedu na binarni kod, tak je to :
0000 0111 - 0000 0001 - 0000 0000 - 0000 0000
Porovnanim s tim, co mas ty, tak vidim, ze ti tam ty nuly nejak nevychazeji. :(
Ohodnoceno: 0x
 
Od: luke237
Datum: 01.02.13 21:30
Sakra, ted jsem si vsiml, ze ten prevod do hexa mam spatne. Mam tam jen ty dolni pulky bajtu *zed*.
0x7 <<24 = 0x07 00 00 00
0x1 <<16 = 0x01 00 00 = 0x00 01 00 00
celkem: 0x07 01 00 00
Ted prevod do BIN uz pak mam dobre.
Jeste jednou se omlouvam.
Ohodnoceno: 0x
 

 

 

 

 

Přihlásit se k odběru odpovědí z této otázky:

Neneseme odpovědnost za správnost informací a za škodu vzniklou jejich využitím. Jednotlivé odpovědi vyjadřují názory jejich autorů a nemusí se shodovat s názorem provozovatele poradny Poradte.cz

 
Copyright © 2004-2016 Poradna Poradte.cz. Všechna práva na poradně Poradte.cz vyhrazena.