题
我已经看到了这个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位无符号整型提示)点击
- 它可能被用作速记用于铸造的另一类型的无符号版本:
signed long int i = -42;
printf("%u\n", (unsigned)i);
这是ANSI C,或者只是一个编译器扩展?
解决方案
unsigned
确实为unsigned int
的简写,并且在标准的C,从而限定。
其他提示
unsigned
装置unsigned int
。 signed
意味着signed int
。仅使用unsigned
是C.声明一个unsigned int
的懒惰的方式是,这是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的补码的计算机。
据C17 6.7.2§2:
类型说明符的每个列表应是下列多集中的一个(由逗号分隔,当存在每项超过一个多重集);以任何顺序,可能会发生的类型说明符,可能与其他声明说明符混合
- 空隙,点击 - 焦炭结果 - 符号字符结果 - 无符号字符结果 - 总之,签订短,短整型,或签名短整型结果 - 无符号短,或unsigned short int型结果 - 诠释,签名,或符号整数结果 - 无符号,或无符号整型结果 - 长,签订长,长整型,或签订长整型结果 - 无符号长,或unsigned long int类型结果 - 很长很长,长签订长,很长很长整型,或签订长期长整型结果 - 无符号长长或unsigned long的长整型结果 - 浮结果 - 双点击 - 长双点击 - _Bool结果 - 浮动_Complex结果 - 双_Complex结果 - 长双_Complex结果 - 原子类型说明符结果 - 结构或联合说明符结果 - 枚举符结果 - typedef名称
因此,在unsigned int
的情况下,我们可以写unsigned
或unsigned int
,或者我们都感到疯狂,int unsigned
。因为标准,后者是愚蠢的,足以让“......可以以任何顺序出现,可能是混合”。这是语言的已知的缺陷。
恰当的C代码使用unsigned int
。