#математика #деление
int b=(a<<6)+(a<<5)+(a<<2);//умножить на 100 int c=(a<<10)-((a<<4)+(a<<3));//умножить на 1000 int d=(a<<3)+(a<<1);//умножить на 10 Подскажете как поделить на 10,100,1000 любого числа 'a' со смещением(сдвигом)? Целочисленный int (остаток от деления не важен).
Ответы
Ответ 1
Запросто :) 0.110 = 0.00011001100110012. То есть деление на 10 — это 1 / 16 + 1 / 32 + 1 / 256 + 1 / 512 + ... Дальше пояснять? :) А если серьезно - возьмите книгу Уоррена «Алгоритмические трюки для программистов», там есть глава 10, «Целое деление на константы». Там много стоящего. То же деление на 10: unsigned divu10(unsigned n) { unsigned q, r; q = (n >> 1) + (n >> 2); q = q + (q >> 4); q = q + (q >> 8); q = q + (q >> 16); q = q >> 3; r = n - q * 10; return q + ((r + 6) >> 4); // return q + (r > 9); }
Комментариев нет:
Отправить комментарий