- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
int log2_floor (unsigned x)
{
#define NIMHTNOE0WNM(n) (((~(x>>n)+1)>>n)&n)
int res, n;
n = NIMHTNOE0WNM(16); res = n; x >>= n;
n = NIMHTNOE0WNM( 8); res |= n; x >>= n;
n = NIMHTNOE0WNM( 4); res |= n; x >>= n;
n = NIMHTNOE0WNM( 2); res |= n; x >>= n;
n = NIMHTNOE0WNM( 1); res |= n;
return res;
}
someone 12.12.2014 13:15 # +4
БЕЗН0ГNМ
3.14159265 12.12.2014 13:29 # 0
Уоррен не советовал писать макросы с такими именами.
guest 12.12.2014 17:41 # +2
Ha ha ha oh wow.
3.14159265 12.12.2014 18:10 # +1
#define N_IF_MSB_HIGHER_THAN_N_OR_ELSE_0_WITH_NO _MINUS(n) (((~(x>>n)+1)>>n)&n)
Чел знает толк в нейминге, да. Имя макроса длиннее тела в несколько раз.
kipar 12.12.2014 19:12 # +1
bormand 12.12.2014 15:00 # 0