Я не собираюсь использовать то, чего не в силах понять.
И про кресты я уже сказал: это — не язык программирования, а какой-то садомазо…
Я на гитхабе, в ЖЖ
Код: Выделить всё
volatile uint32_t val = 10000;
const uint32_t k = (1 << 20) * 0.028261 + 0.5;
uint32_t out = (uint64_t)k * val >> 20; // -> 282Код: Выделить всё
volatile uint32_t val = 10000;
const uint32_t N = 13;
const uint32_t D = 46 * 10;
uint32_t out = val * N / D; // -> 282
При том, ушли от понятной формулыReflector писал(а):При чем тут кресты...
Код: Выделить всё
uint8_t value = ((24 * h / 17) / 60) % 6;Код: Выделить всё
uint8_t value = ((25* h / 18) / 59) % 7;Код: Выделить всё
uint8_t value = ((24 * h / 17) / 60) % 6;Код: Выделить всё
constexpr auto countSetBits(uint32_t value)
{
auto bits = 0;
while (value)
{
value &= value - 1;
bits++;
}
return bits;
}
Код: Выделить всё
PinList<PA5, PA6, PA7, PB10, PA0, PA1> pins;давным-давно в другой ветке я говорил, что мечта всех программистов заключается в том, чтобы было можно написать "сделай мне хорошо" - и это вся программа, а компилятор разберется, что именно будет хорошо... но это оффтоп и я больше не будуVladislavS писал(а):И C++ позволяет переложить это на плечи компилятора уже сейчас, а не "скоро".
В большинстве случаев не позволяет. Покажите что сгенерирует компиль если значение не константно, а например считывается из порта.VladislavS писал(а):А вот так она у меня в библиотеке на С++ работает. Вычисляется на этапе компиляции, если аргумент позволяет.
Код: Выделить всё
uint32_t getMinPriority(uint32_t value)
{
#ifdef __ARM_ARCH_6M__
static const uint8_t table[32] = { 0, 1, 2, 24, 3, 19, 6, 25, 22, 4, 20, 10, 16, 7, 12, 26, 31, 23, 18, 5, 21, 9, 15, 11, 30, 17, 8, 14, 29, 13, 28, 27 };
value = (value & -value) * 0x04D7'651F;
return table[value >> 27];
#else
return __CLZ(__RBIT(value));
#endif
}
getMinPriority(0x0F00'00F0); // 4
getMinPriority(0x0F00'0000); // 24
В большинстве случаев не позволяет.[/uquote]Попытался вспомнить весь свой программистский опыт и не вспомнил когда бы я эту функцию применял на неконстантных данных. Наиболее близко это бит чётности в UART, который считается аппаратно.VladislavS писал(а):А вот так она у меня в библиотеке на С++ работает. Вычисляется на этапе компиляции, если аргумент позволяет.
Код: Выделить всё
return __CLZ(__RBIT(value));