что такое тип данных без знака?
Я видел этот unsigned
"типизации" тип использовал пару раз, но ни разу не видел объяснения. Я полагаю, что есть соответствующий signed
тип. Вот пример:
static unsigned long next = 1;
/* RAND_MAX assumed to be 32767 */
int myrand(void) {
next = next * 1103515245 + 12345;
return((unsigned)(next/65536) % 32768);
}
void mysrand(unsigned seed) {
next = seed;
}
что я собрал до сих пор:
- в моей системе, sizeof(unsigned) = 4
(намекает на 32-разрядный unsigned int)
- он может быть использован в качестве стенографии для приведения другого типа к неподписанной версии:
signed long int i = -42;
printf("%un", (unsigned)i);
это ANSI C, или просто расширение компилятора?
7 ответов:
unsigned
означаетunsigned int
.signed
означаетsigned int
. Используя толькоunsigned
- это ленивый способ объявленияunsigned int
В C. Да это ANSI.
исторически в C, если вы пропустили тип данных "int" был принят. Так что "неподписанные" является сокращением для "беззнаковый инт". Это долгое время считалось плохой практикой, но все еще существует достаточное количество кода, который его использует.
в C,
unsigned
ярлык дляunsigned int
.у вас есть то же самое для
long
это ярлык дляlong int
и это также можно объявить
unsigned long
(это будетunsigned long int
).это в стандарте ANSI
В C и C++
unsigned = unsigned int (Integer type) signed = signed int (Integer type)
целое число без знака, содержащее n битов, может иметь значение от 0 до (2^n-1) , что составляет 2^n различных значений.
целое число без знака является положительным или нулевым.
целые числа со знаком хранятся в компьютере с использованием дополнения 2.
чего моя ответ из другого вопроса.
С спецификация C раздел 6.7.2:
- unsigned, или unsigned int
означает, что
unsigned
, Если не указан тип, по умолчанию должно бытьunsigned int
. Так пишуunsigned a
это то же самое, чтоunsigned int a
.
согласно C17 6.7.2 §2:
каждый список спецификаторов типа должен быть одним из следующих мультинаборов (разделенных запятыми, когда имеется более одного мультинабора на элемент); спецификаторы типа могут встречаться в любом порядке, возможно, смешанные с другими спецификаторами объявления
- недействительными
- чар
- подписано char
- неподписанный символ
- short, signed short, short int или signed short int
- беззнаковое короткое, или unsigned short int
- int, подписано или подписано int
- unsigned, или unsigned int
- давно, подписан давно, давно инт, или подписаны инт
- unsigned long, или unsigned long int
- длинный, подписанного долго долго, долго долго инт или подписано длинный интервал
- неподписанные долго долго, или без знака длинный инт
- поплавок
- двойной
- длинный двойной
- _Bool
- float _Complex
- двойной _Complex
- долго двойное _Complex
- атомарный тип спецификатор
- спецификатор структуры или объединения
- перечисление спецификатор
- имя typedefтак что в случае
unsigned int
можно писатьunsigned
илиunsigned int
, или если мы чувствуем ума,int unsigned
. Последнее, поскольку стандарт достаточно глуп, чтобы позволить"...может происходить в любом порядке, возможно смешанном". Это известный недостаток языка.правильный код C использует
unsigned int
.