2015-10-11 4 views
0

Я пытаюсь проверить некоторые домашние ответы о переполнении для дополнения, вычитания и т. Д., И мне интересно, могу ли я указать размер типа данных. Например, если я хочу посмотреть, что произойдет, когда я попытаюсь назначить -128 или -256 для 7-битного беззнакового int.Есть ли способ указать размер int в C?

+3

http://en.cppreference.com/w/cpp/header/cstdint – ApproachingDarknessFish

+0

Я в общей сложности программирования нуб, я могу установить символы для INT значения, и они «Хорошо? Также unsigned char не является 7-битным? – Austin

+0

'char' имеет самый маленький размер. Это 8 или более бит. – emlai

ответ

3

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

struct bits9 
{ 
    int x : 9; 
}; 

Теперь вы можете использовать этот тип bits9, который имеет одно поле в нем x, что составляет всего 9 бит в размере.

struct bits9 myValue; 

myValue.x = 123; 
+0

Спасибо, это то, что я искал. – Austin

0

Наименьший размер, который у вас есть, - это char, который является 8-битным целым числом. У вас могут быть неподписанные и подписанные символы. Взгляните на заголовок stdint.h. Он определяет типы int для вас независимо от платформы. Также нет такой вещи, как 7-битное целое число.

+0

'char' is * не менее * 8 бит. –

+0

Ну 7 бит - гипотетический размер для вопросов, связанных с домашним заданием, которые у меня есть. Он просит определить, есть ли переполнение, когда вы добавляете определенные положительные и отрицательные значения в 7, 8 и 9-разрядные процессоры. Я пытался проверить свои ответы с помощью C, но я думаю, что не могу. – Austin

0

Использование встроенных типов у вас есть такие вещи, как:

char  value1;  // 8 bits 
short  value2;  // 16 bits 
long  value3;  // 32 bits 
long long value4;  // 64 bits 

Примечание В этом случае с компилятором от Microsoft на Windows. В стандарте C не указаны точные ширины, отличные от «этот должен быть как минимум такой же большой, как этот другой» и т. Д. Если вам нужна только конкретная платформа, вы можете распечатать размеры ваших типов и использовать их, как только вы вычислил их.

В качестве альтернативы вы можете использовать stdint.h, который находится в стандарте C99. Он имеет типы с шириной в названии, чтобы понять

int8_t value1; // 8 bits 
int16_t value2; // 16 bits 
int32_t value3; // 32 bits 
int64_t value4; // 64 bits 
1

Для произвольного значения размера, вы можете использовать bitfields в структурах. Например, для 7-битового значения:

struct something { 
    unsigned char field:7; 
    unsigned char padding:1; 
}; 
struct something value; 
value.field = -128; 
Смежные вопросы