什么是无符号数据类型?

hha*_*amu 85 c unsigned types

我已经看过这种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;
}
Run Code Online (Sandbox Code Playgroud)

到目前为止我收集的内容:
- 在我的系统上,sizeof(unsigned) = 4(提示32位无符号整数)
- 它可以用作将另一种类型转换为无符号版本的简写:

signed long int i = -42;
printf("%u\n", (unsigned)i);
Run Code Online (Sandbox Code Playgroud)

这是ANSI C,还是仅仅是编译器扩展?

Mar*_*wis 135

unsigned确实是unsigned int标准C中的简写.


Pol*_*878 30

unsigned手段unsigned int. signed手段signed int.使用just unsigned是一种unsigned int在C 中声明a的懒惰方式.是的,这是ANSI.


小智 13

历史上在C中,如果省略了数据类型"int"则假设.所以"unsigned"是"unsigned int"的简写.这已经被认为是很长时间的不良做法,但仍有相当数量的代码使用它.

  • @Charles贝利:这几天 - 至少如果你是务实而不是正式的 - 长,是int,short和焦炭被认为是不同的数据类型,也可以是不同的大小)用无符号(和默认,签署)是预选赛.因此,您倾向于使用"unsigned int",就像使用"unsigned long"或"unsigned char"一样(并且它清楚地表明您不会错过int)."long int"或"short int"中的int是多余的. (10认同)
  • 我不知道这是不好的做法.这有什么理由吗?`long`而不是`long int`很常见,所以我不确定为什么`unsigned`而不是`unsigned int`是不可接受的. (6认同)

Thi*_*hib 7

在C中,unsigned是一个快捷方式unsigned int.

你有同样的,因为long它是一个快捷方式long int

并且也可以声明unsigned long(它将是a unsigned long int).

这是ANSI标准


小智 5

在 C 和 C++ 中

unsigned = unsigned int (Integer type)
signed   = signed int (Integer type)
Run Code Online (Sandbox Code Playgroud)

包含 n 位的无符号整数可以具有介于 0 和 (2^n-1) 之间的值,即 2^n 个不同的值。

无符号整数是正数或零。

有符号整数使用 2 的补码存储在计算机中。