Подтвердить что ты не робот

Целочисленный размер в c зависит от того, что?

Размер целого зависит от того, что?

Является ли размер переменной int в C зависимым от машины или компилятора?

4b9b3361

Ответ 1

Это зависит от реализации. Стандарт C требует только того, чтобы:

  • char имеет не менее 8 бит
  • short имеет не менее 16 бит
  • int имеет не менее 16 бит
  • long имеет не менее 32 бит
  • long long имеет не менее 64 бит (добавлено в 1999 году)
  • sizeof (char) & le; sizeof (short) & le; sizeof (int) & le; sizeof (long) & le; sizeof (long long)

В 16/32-битные дни стандартом де-факто было:

  • int был "родным" целым размером
  • другие типы были минимальным допустимым размером

Однако 64-разрядные системы обычно не делали int 64 бит, что создавало бы неудобную ситуацию с тремя 64-битными типами и 32-разрядным типом. Некоторые компиляторы расширили long до 64 бит.

Ответ 2

Это зависит прежде всего от компилятора. Например, если у вас 64-разрядный процессор x86, вы можете использовать старый 16-разрядный компилятор и получить 16-битные ints, 32-битный компилятор и получить 32-битные ints или 64-разрядный компилятор и получить 64 -битные ints.

Это зависит от процессора в той степени, в которой компилятор нацеливается на конкретный процессор, и (например) древний 16-разрядный процессор просто не будет запускать код, ориентированный на новый 64-разрядный процессор.

Стандарты C и С++ гарантируют минимальный размер (косвенно, указывая минимальные поддерживаемые диапазоны):

char: 8 bits
short: 16 bits
long: 32 bits
long long: 64 bits

Также гарантируется, что размеры/диапазоны строго неубывающие в следующем порядке: char, short, int, long и long long 1.

1 long long указан в C99 и С++ 0x, но некоторые компиляторы (например, gcc, Intel, Comeau) разрешают его также в коде С++ 03. Если вы хотите, вы можете убедить большинство (если не всех) отклонить long long в коде С++ 03.

Ответ 3

Формально представления всех основных типов данных (включая их размеры) зависят от компилятора и зависят только от компилятора. Компилятор (или, вернее, реализация) может служить слоем абстракции между программой и машиной, полностью скрывая машину от программы или искажая ее каким-либо образом.

Но на практике компиляторы предназначены для генерации наиболее эффективного кода для данной машины и/или ОС. Чтобы добиться того, что фундаментальные типы данных должны иметь естественное представление для данной машины и/или ОС. В этом смысле эти представления косвенно зависят от машины и/или ОС.

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

Тем не менее, если какой-либо тип данных не поддерживается машиной, компилятор может предоставить этот тип данных программам, реализуя его поддержку на уровне компилятора ( "имитируя" ). Например, 64-разрядные целые типы обычно доступны в 32-битных компиляторах для 32-разрядных машин, хотя они не поддерживаются непосредственно машиной. В тот же день компиляторы часто предоставляли поддержку на уровне компилятора типов с плавающей точкой для машин, которые не были оснащены процессором с плавающей запятой (и поэтому не поддерживали типы с плавающей запятой напрямую).

Ответ 4

AFAIK, размер типов данных зависит от реализации. Это означает, что он полностью зависит от исполнителя (т.е. Парня, пишущего компилятор), чтобы выбрать, каким он будет.

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

Ответ 5

Как сказал MAK, это зависит от реализации. Это означает, что это зависит от компилятора. Как правило, компилятор нацеливается на одну машину, поэтому вы также можете считать ее зависимой от машины.

Ответ 6

Это зависит как от архитектуры (машины, исполняемого типа), так и от компилятора. C и С++ гарантируют определенные минимумы. (Я думаю, что это char: 8 бит, int: 16 бит, long: 32 бит)

C99 включает некоторые известные типы ширины, такие как uint32_t (по возможности). См. stdint.h

Обновление: адресация Конрада Майера.

Ответ 7

Это зависит от рабочей среды независимо от того, какое оборудование у вас есть. Если вы используете 16-битную ОС, такую ​​как DOS, тогда она будет 2 байта. В 32-разрядной ОС, такой как Windows или Unix, это 4 байта и так далее. Даже если вы запускаете 32-разрядную ОС на 64-битном процессоре, размер будет всего 4 байта. Надеюсь, это поможет.

Ответ 8

Размер переменной Integer зависит от типа компилятора:

  • если у вас есть 16-битный компилятор:

    size of int is 2 bytes
    char holds 1 byte
    float occupies 4 bytes
    
  • если у вас есть 32-битный компилятор:

    размер каждой переменной в два раза меньше ее размера в 16-битном компиляторе

    int hold 4 bytes
    char holds 2 bytes
    float holds 8 bytes 
    

То же самое происходит, если у вас есть 64-битный компилятор и т.д.