В общем, ответ на вопрос «Могу ли я выполнять M-битную арифметику на процессоре, который имеет только N бит?» это "Конечно да!"
Чтобы понять, почему: еще в школе вы, вероятно, выучили свои таблицы сложения и умножения только для 10 + 10 и 1010. Тем не менее, у вас нет проблем с сложением, вычитанием или умножением чисел, состоящих из любого количества цифр.
И, проще говоря, именно так компьютер может работать с числами, превышающими его разрядность. Если у вас есть два 32-битных числа, и вы можете складывать их только по 8 бит за раз, ситуация почти такая же, как при наличии двух 4-значных чисел, которые вы можете добавлять только по одной цифре за раз. В школе вы научились складывать отдельные пары цифр и обрабатывать перенос. Точно так же компьютер просто складывает пары 8-битных чисел и обрабатывает перенос. Вычитание и умножение следуют тем же правилам, которым вы учились в школе. (Деление, как всегда, может быть сложнее, хотя алгоритм длинного деления, который вы выучили в школе, часто также является хорошим началом для длинного компьютерного деления.)
Это помогает иметь очень четкое представление о системах счисления с основанием, отличным от 10. Я сказал: «Если у вас есть два 32-битных числа и вы можете складывать их только по 8 бит за раз, ситуация почти такая же, как если бы у вас было два 32-битных числа. 4-значные числа, которые можно добавлять только по одной цифре за раз ». Теперь, когда вы берете два 32-битных числа и складываете их по 8 бит за раз, оказывается, что вы делаете арифметические операции с базой 256. Поначалу это звучит безумно: большинство людей никогда не слышали о базе 256, и это похоже, что работать на такой большой базе может быть невероятно сложно. Но на самом деле это совершенно просто, если подумать.
(Ради интереса я однажды написал код для арифметических вычислений с произвольно большими числами, и он работает с базой 2147483648. Поначалу это звучит действительно безумно, но это так же разумно, и на самом деле это как работает большинство библиотек произвольной точности. Хотя на самом деле "настоящие" библиотеки, вероятно, используют базу 4294967296, потому что они умнее меня в обработке переносов и не хотят тратить впустую ни единого бита.)
person
Steve Summit
schedule
07.10.2019