English | Magyar
JS ki | CSS ki | Ékezetek ki | HiContrast
Lapozó:  (0 - 1424) 
<== | ==>
Ugrás a végére | Összes megjelenítése | Utolsó oldal
OpenOpera patches | Opera-SSL patches | Opera 12.15 source (Git repository) | Opera 12.15 source (Torrent) | Opera internal pages | Otter Browser Linux x64 - Qt5.15.2/QtWebKit5.602.1 (2024.04.27. 20:05)
OS for MC680x0 | OS for PPC | OS for Sparc64 | besztofbégéaefcé | CSÉNDZSLOG | WebToolz | DDG Shit Filter | Google Shit Filter | Progz | Fast CSS Box | Browser | OS | Agent | Statisztika | BBCode
Monospace font-family: Courier New | Browser default monospace
Email értesítő / Email notification ===> 
Keresés
Σ: 1 post

TCH  (statz) Főfasz
#1, Főfasz (10443)
2346 | #3a00 | ^ | Idézet | Mon, 04 Jan 2016 22:34:00 +01
188.36.*.* Linux x86 Opera Classic Hungary *.catv.pool.telekom.hu
Kétféle shift van. Az egyik a logikai, a másik az aritmetikai. A logikai azt csinálja, amit várna az ember, egy bittel erre vagy arra lépteti a számot. Az aritmetikai ugyanezt teszi, de előjelhelyesen. Felfele (ill. balra) ez nem jelent különbséget, viszont jobbra igen.

Ha aritmetikai jobbraléptetést végzünk, akkor a tetején nem 0 fog bejönni, hanem az előjelbit.
Két példa (8 biten):
10010011 >> 3 = 11110010
00101101 >> 2 = 00001011
Amint lehetett látni, a tetejébe az előjel lépett be annyiszor, amennyivel elforgattuk.

Ilyen művelet azonban maximum assemblyben van, a nyelvek nem támogatják, csak a logikait. "Emulálni" a következőképp lehet:
s8 asr(s8 num, u8 step)
{
	return (num >> 7 == 0 ? 0 : ~(-1 >> step)) | num >> step;
}
Azaz, ha az előjelbit 0, akkor nincs dolgunk, viszont, ha 1, akkor szükségünk van egy olyan maszkra, aminek a tetején pont annyi egyes van, amennyivel tolódni fog a szám. Ezt úgy lehet előállítani, ha egy csak 1-eseket tartalmazó számot (-1) a szükséges mértékben eltolunk, majd negálunk. Szemléltetem (8 biten):
; ha step = 3
11111111 >> 3 = 00011111
~00011111 = 11100000
Viszont a maszk összeállításához egy elágazást felhasználni talán nem a legoptimálisabb. Ki lehet váltani úgy, ha az előjelbitet nem feltételnek használjuk, hanem kivonunk belőle 1-et, amit utána negálunk és elforgatunk a bitszélesség és az eltolás mértékének különbségével.
~((num >> 7) - 1) << (8 - step)
Ez így elsőre biztos WTF, de máris mutatom (8 biten):
; ha num negatív (1xxxxxxx) és step = 3
1xxxxxxx >> 7 = 00000001
00000001 - 00000001 = 00000000
~00000000 = 11111111
11111111 << (8 - 3) = 11100000

; ha num pozitív 0xxxxxxx és step = 3
0xxxxxxx >> 7 = 00000000
00000000 - 00000001 = 11111111
~11111111 = 00000000
00000000 << (8 - 3) = 00000000
Tehát a fenti kód így módosul:
s8 asr(s8 num, u8 step)
{
	return ~((num >> 7) - 1) << (8 - step) | num >> step;
}
Viszont nem fontos éppenséggel függvénybe sem rakni, lehet makró is, csak akkor le kell kezelni a bitszélességet:
#define asr(num, step) (~(((num) >> ((sizeof(num) << 3) - 1)) - 1) << ((sizeof(num) << 3) - (step)) | (num) >> (step))


English | Magyar
JS ki | CSS ki | Ékezetek ki | HiContrast
Lapozó:  (0 - 1424) 
<== | ==>
Ugrás a végére | Összes megjelenítése | Utolsó oldal
OpenOpera patches | Opera-SSL patches | Opera 12.15 source (Git repository) | Opera 12.15 source (Torrent) | Opera internal pages | Otter Browser Linux x64 - Qt5.15.2/QtWebKit5.602.1 (2024.04.27. 20:05)
OS for MC680x0 | OS for PPC | OS for Sparc64 | besztofbégéaefcé | CSÉNDZSLOG | WebToolz | DDG Shit Filter | Google Shit Filter | Progz | Fast CSS Box | Browser | OS | Agent | Statisztika | BBCode
Monospace font-family: Courier New | Browser default monospace
Email értesítő / Email notification ===> 
Keresés

Név: (max 255 byte)

Email: (max 255 byte) Nem kötelező!

Üzenet: (max 65536 kar.) 65536-0=65536




crap_vkn v4.34.0 by TCH
Thx to saxus for the escaped string decoder function (PHP), the realIP function (PHP) & the SQL handle layer (PHP), to thookerov for the int_divide function (PHP), to Jeff Anderson for the getSelText function (JS), to Alex King for the insertAtCursor function (JS), Flood3r for the new CSS styles, Pety for the spamprotection idea and some design and comfort ideas, MaxMind for the IP2Country database, famfamfam for the flags of countries and an unknown PHP programmer for the removeAccents function.



Kecskebaszók ide!