Предполагается, что целые числа в C обрабатываются в спецификации оборудования или в программном обеспечении?

Предполагается, что целые числа в C обрабатываются в спецификации оборудования или в программном обеспечении?

Целочисленным я имею в виду примитив "int"

Основная идея заключается в том, что если целые числа в C не зависят от аппаратного обеспечения, было бы нарушением стандарта то, что gcc реализует разные целочисленные обработчики. Таким образом, вы могли бы иметь свой традиционный 32-битный int-обработчик, а затем вы могли бы также иметь обработчики для 256-битных целых чисел или, возможно, даже динамических размеров.

Я знаю, что такое long и long long, но я не уверен, что они не зависят от предоставленного оборудования, и я хотел бы просто указать размер / тип обработчика "int", который будет использоваться при построении цепочки инструментов.

Я также понимаю опасность этого (потому что сборка 256-битных целых чисел с помощью 32-битного целочисленного компилятора была бы плохой!), Но для тех фрагментов кода, которые требуют чего-то вроде библиотеки gmp, я думаю, что это сделало бы читаемость кода намного лучше, Совместимость была бы такой же, но зависимость была бы от компилятора, а не от самого кода.

Сумасшедшая идея, я знаю... но вернемся к первоначальному вопросу:

Предполагается, что целые числа в C обрабатываются в спецификации оборудования или в программном обеспечении?

3 ответа

Решение

Стандарт говорит

Равнина" int Объект имеет естественный размер, предложенный архитектурой среды выполнения (достаточно большой, чтобы содержать любое значение в диапазоне INT_MIN в INT_MAX как определено в заголовке <limits.h>).

И описание <limits.h> ограничения INT_MIN быть не более -32767 и INT_MAX должно быть не менее 32767. Таким образом, если ваше оборудование имеет слово 12 бит, вы должны использовать два слова для int,

Да, int будет обрабатываться в исходном размере. Так sizeof(int) может дать вам другое значение в зависимости от того, на какой системе вы работаете. Все математика для int будет обрабатываться встроенными инструкциями процессора - гораздо быстрее, чем в программном обеспечении. Если вам нужен int256, вам нужно написать это самостоятельно. И я уверен, что есть целочисленные библиотеки произвольного размера.

Реализация A C, которая реализовала 256-битные целые, была бы полностью совместима со стандартом C (но учтите, что она должна делать long int и long long int, по крайней мере, тоже long).

Однако код, созданный таким компилятором, как правило, не будет совместимым по ссылкам с кодом, созданным другими компиляторами на той же платформе, что является одной из причин, почему это не делается на практике.

Другие вопросы по тегам