Autor | Zpráva | ||
---|---|---|---|
halogan Profil |
#1 · Zasláno: 18. 9. 2005, 16:37:39
Dobrý den,
dneska jsem se chtěl nějak poučit co se týče bitových operátorů, ale jaksi jsem to nepochopil. Četl jsem asi 3 české a několik anglických návodů a stále to nechápu. Mohl by mi to prosím někdo polopaticky vysvětlit? Díky print $b & ~1; // vypise nejvyssi sude cislo, ale mensi nez $b, ale nevim proc :) |
||
Charlie Profil |
#2 · Zasláno: 18. 9. 2005, 17:09:39
Já vím, že zápis:
if ($x & 1) { X je sudé, protože prý má první bit nastavený na 1. Bitové operátory jsem taky nepochopil, protože o se o nich nikde podrobně nepíše. |
||
halogan Profil |
#3 · Zasláno: 18. 9. 2005, 17:11:26
Dle mych testu:
if ($x & 1) { |
||
Charlie Profil |
#4 · Zasláno: 18. 9. 2005, 17:19:10
No vidíš, máš pravdu. Já to tady mám v jednom scriptu blbě napsané.
|
||
halogan Profil |
#5 · Zasláno: 18. 9. 2005, 17:23:54
Odpovedi jdu cist sem:
http://en.wikipedia.org/wiki/Binary_numeral_system http://en.wikipedia.org/wiki/Bitwise_operation |
||
Jáá Profil |
#6 · Zasláno: 18. 9. 2005, 17:35:02
Není to až zas tak složité. Nechce se mi o tom rozepisovat, ale možná vám pomůže tohle (je to pro C, ale pracuje to stejne jako v php): http://www.linuxsoft.cz/article.php?id_article=741.
Je to namátkou z Googla při hledání "bitové operátory php". |
||
Jáá Profil |
#7 · Zasláno: 18. 9. 2005, 17:38:47
Tak už jsem se koukal na Wikipedii a pokud umíte anglicky, tak je to tam fakt dobrý.
|
||
halogan Profil |
#8 · Zasláno: 18. 9. 2005, 18:15:52
Jáá: Oba linky, cos mi poslal jsem už dávno procházel, ale na Wikipedii to je srozumitelně, už to docela chápu, jen mi občas něco nevyjde, např.:
|
||
halogan Profil |
#9 · Zasláno: 18. 9. 2005, 18:39:05 · Upravil/a: halogan
Bezva, je to moc pekny, binarka se mi zacina libit. Uz jsem konecne i pochopil proc ($x & 1) vraci 1 pokud je liche :)
Jedna otazecka: Jak se to da v PHP nejak rozumne vyuzit? Napada me treba testovani sude/liche bez pouziti modula, to nejvyssi sude (ktere furt nechapu), ale dal nevim. Diky |
||
Já Profil * |
#10 · Zasláno: 18. 9. 2005, 19:02:29
zkus
|
||
kaifman Profil |
#11 · Zasláno: 18. 9. 2005, 20:38:42
dejme tomu ze mas treba vic vlastnosti u neceho a misto toho aby jsi musel pro kazdou vlastnost delat zvlast bool sloupecek muzes mit vsechny vlastnosti v jednom integeru, vahy vlastnosti musi byt naslenovne 1,2,4,8,16,32,64,128,atd a pak kdyz chces zjistit jestli ta dana vlastnost je tak: if ($neco & 8 = 8) {echo "neco ma vlastnost osm"; }
|
||
halogan Profil |
#12 · Zasláno: 18. 9. 2005, 21:58:55
kaifman: Nejak dobre jsem te nepochopil, mohl by jsi dat kraticky prikladek? Diky
|
||
kaifman Profil |
#13 · Zasláno: 18. 9. 2005, 22:21:09
mame treba takovehle role a jejic bitove vahy
1=>'Administrátor' 2=>'Obchodník' 4=>'Správce obsahu' 8=>'Uživatel' create table uzivatel(id int primary key auto_increment, jmeno varchar(50), role int); a ted chceme vytahnout z tabulky vsechny kteri maji roli spravci obsahu (muzou mit i jinou) select * from uzivatel where role&4=4; kdybys chtel jenom s roli spravce obsahu tak das role=4, to je jasny nebo chceme ulozit noveho uzivatele ktery bude admin a spravce obsahu insert uzivatel set jmeno='alois', role=1|4; |
||
halogan Profil |
#14 · Zasláno: 18. 9. 2005, 22:31:01
kaifman: Diky, uz to docela chapu. Jen jeste dobre pochopim, jak to presne pracuje, jak se pridava, odebira, ... a bude to v poho, diky moc.
|
||
halogan Profil |
#15 · Zasláno: 19. 9. 2005, 00:18:05
Jsem to asi pochopil:
$h = Array(2, 8, 10, 12, 17, 20, 21, 22, 23); // hodiny kdy se zobrazuje Diky moc kaifmane, diky tobe se mi rozsiril horizont nejen co se tyce praktik. DB navrh ted budu resit mnohem jednuseji! |
||
llook Profil |
#16 · Zasláno: 19. 9. 2005, 20:18:26 · Upravil/a: llook
print ~8; // 1000 => 0111, ocekavam 7, ale dostanu -9, proc?
Ono to totiž není z 1000 na 0111, ale z 00001000 na 11110111 (akorát ve skutečnosti je těch bitů 32). Pokud je nejvyšší bit integeru 1, je to vždycky záporné číslo. Záporná čísla se tvoří takzvaným dvojkovým doplňkem: $zaporne = ~ ($kladne + 1); a naopak $kladne = ~ ($zaporne + 1); Proto například binární negace nuly je mínus jedna. |
||
Časová prodleva: 19 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0