Как int реализован в любом компиляторе? - PullRequest
0 голосов
/ 05 сентября 2018

В 64-битном процессоре одновременно обрабатывается 64 бита данных. Поэтому, когда нужно выполнить любую арифметическую операцию, она выполняется в ALU с использованием ACCUMULATOR , который также является 64-разрядным.

Но размер int в большинстве случаев составляет более 2 байтов. Как реализовано 2-байтовое int ( арифметических операций )?

1 Ответ

0 голосов
/ 05 сентября 2018

Основная идея, конечно же, в виде двоичных чисел. Но есть много деталей, которые усложняют вещи. Это зависит от аппаратного обеспечения и компилятора.

Я использовал компиляторы, которые представляли целые числа в каждом из упомянутых здесь способов.

Один из возможных способов представления вещей - просто создать наибольшее двоичное целое число, которое вы можете. С 64 битами и одним битом назад для знака вы получаете 2 до степени 64 минус 1 или чуть более 1,8 x 10 ^ 19.

Если вы хотите сделать сложение и вычитание, это нормально. Но умножение утомительно, потому что вам нужно сделать одно умножение для каждого бита. Там вам могут помочь плавающие сопроцессоры.

Некоторое оборудование будет поддерживать интересные функции, поэтому его использование полезно. Например, некоторые микросхемы ЦП будут поддерживать двоично-десятичное число.

https://en.wikipedia.org/wiki/Binary-coded_decimal

Если вы достаточно взрослый, чтобы помнить Z80, это первый процессор, который я когда-либо использовал, с BCD.

https://en.wikipedia.org/wiki/Zilog_Z80

Это означает, что вам нужно выполнять двоичные операции только на 4-битном уровне, поскольку каждая цифра вашего десятичного числа отделена от других цифр. Если оборудование поддерживает это напрямую, вы можете избежать написания кода для преобразования всех 64 битов в целое и десятичное. Это не так эффективно. С 64 битами и пропуском одного для знака вы получите только 15 цифр.

Опять сложить и вычесть несложно. Умножение становится вопросом реализации двузначного умножения в двоичном виде с последующим включением переноса для результатов более 10.

Разное оборудование будет поддерживать вещи по-разному. Существует вопрос о порядке байтов от младшего к младшему.

https://chortle.ccsu.edu/AssemblyTutorial/Chapter-15/ass15_3.html

Есть много других возможностей на эзотерическом оборудовании.

...