Предполагается, что целые числа в 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).
Однако код, созданный таким компилятором, как правило, не будет совместимым по ссылкам с кодом, созданным другими компиляторами на той же платформе, что является одной из причин, почему это не делается на практике.