| TCH (statz) | ![]() #1, Főfasz (10579) |
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;
}helyettx &= (++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;
}helyettx = (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;
}helyettx = (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. |