Имеется функция, которая производит умножение двух чисел.
int mult(int a, int b) {
int result = 0;
while (b != 0) {
if (b & 0x1 == 0x1)
result += a;
b >>= 1;
a <<= 1;
}
return result;
}
нужно переделать ее так, чтобы она принимала значения uint8_t, а возвращала uint32_t. Напрямую заменить не выходит, функция начинает выдавать неверные ответы.
Скажем, есть a = 6, b = 3. И если просто заменить типы, то результат получится 450. Логичного объяснения, почему выдается именно такое число, я не нашел.
Ваш пример с заменой типов у меня работает. Правда, когда начинаю умножать большие числа, он перестает работать. Переполнение происходит, если результат произведения > 511. Поэтому я ввожу временную переменную, которую дальше и сдвигаю влево. Поэтому мои изменения следующие:
uint32_t mult(uint8_t a, uint8_t b) {
uint32_t result = 0;
uint32_t tmpA = a;
while (b != 0) {
if (b & 0x1 == 0x1)
result += tmpA;
b >>= 1;
tmpA <<= 1;
}
return result;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Возникла необходимость получить копию первого столбца в двумерном массивеЯ все делаю через указатели, и одномерный и двумерный
Задача: Процентная ставка по вкладу составляет P процентов годовых, которые прибавляются к сумме вклада в конце годаВклад составляет X рублей...
структура и данные таблицы тут https://pastebincom/u1GY7gvr