Я хочу округлить целое число, i
, вплоть до ближайшего кратного 4.Стандартный способ обогнуть целое вплоть до ближайшего кратного 4
Например:
0 -> 0
1 -> 0
2 -> 0
3 -> 0
4 -> 4
5 -> 4
6 -> 4
7 -> 4
8 -> 8
9 -> 8
Очевидным образом для меня чтобы сделать это было бы:
i = (i/4) * 4;
Но я подвергся критике за использование этого, потому что, мол, неясно, и выглядит как ошибка.
Я знаю очевидной альтернативы, побитовое смещение:
i = (i >> 2) << 2;
Но потом я понял, что есть другой подход полностью:
(i | 3) - 3
Пример программы:
#include <stdio.h>
int main(void) {
int i;
for(i = 0; i < 4*4; i++) {
printf("%d %d %d %d\n", i, (i/4) * 4, (i >> 2) << 2, (i | 3) - 3);
}
return 0;
}
Я хочу знать стандартный способ сделать это, и если современный компилятор с наивысшим opti misation будет достаточно интеллектуальным, чтобы преобразовать мой код в самый быстрый метод.
Самый быстрый - 'i & ~ 3'. –
@ LeeDanielCrocker Я собирался предположить, что, но педантично, я думаю, что это может быть IB. Тем не менее, это, вероятно, будет работать нормально во всех нормальных условиях. – Mysticial
Что должно «-1» округлить до? 0? или -4? – Mysticial