TCH (statz) | #1, Főfasz (10466) |
1460 | #2f36 | ^ | Idézet | Mon, 08 Dec 2014 00:30:26 +01 |
46.139.*.* | *.catv.pool.telekom.hu |
Ugye a múltkor volt némi optimtrükksó itten, most is nyomok egy tippetet, mermérne.if (++x == w) { x = 0; }helyett x &= (++x == w) - 1;Magyarázat pedig a következő: • Ha ++x == w hamis, akkor 0-val számolva: x &= (0) - 1; /* ami ugye x &= -1; lesz, ami ugyanaz, mint az x = x; */ • Ha ++x == w igaz, akkor 1-el számolva:x &= (1) - 1; /* ami ugye x &= 0; lesz, ami ugyanaz, mint az x = 0; */ Ezt egyébként fel is lehet írni, hogy hogyan lehet boolmaskot csinálni:#define boolmask(cond) !(cond) - 1 És akkor ugyaneme logika mentén: if (x > max) { x = max; }helyett x = (x & ((x > max) - 1)) | (max & ((x <= max) - 1));ugyanis itt a feltétel teljesülésétől függően x = x | 0; vagy x = 0 | max; lesz. És akkor ennek megfelelően if (x < min) { x = min; }helyett x = (x & ((x < min) - 1)) | (min & ((x >= min) - 1));Továbbmenve: #define saturate_hi(val, max) ((val) & (((val) > (max)) - 1)) | ((max) & (((val) <= (max)) - 1)) #define saturate_lo(val, min) ((val) & (((val) < (min)) - 1)) | ((min) & (((val) >= (min)) - 1))Még továbbmenve: #define set_on_cond(val, cond, set) val = ((val) & ((cond) - 1)) | (set & (!((cond)) - 1))Köszönöm a figyelmetlen segget. Bikacsököt bilgécnek és a kurwa anyját a mikrofosnak. |