我已经看到了这个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 intsigned意味着signed int。仅使用unsigned是C.声明一个unsigned int的懒惰的方式是,这是ANSI。

从历史上看在C,如果省略了数据类型“INT”假定。因此,“未签名”是“无符号整型”的简写。这已经考虑了很长一段时间不好的做法,但仍有相当数量的代码在那里使用它。

在C,unsignedunsigned 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 a相同unsigned int a

据C17 6.7.2§2:

  

类型说明符的每个列表应是下列多集中的一个(由逗号分隔,当存在每项超过一个多重集);以任何顺序,可能会发生的类型说明符,可能与其他声明说明符混合

     

- 空隙,点击    - 焦炭结果    - 符号字符结果    - 无符号字符结果    - 总之,签订短,短整型,或签名短整型结果    - 无符号短,或unsigned short int型结果    - 诠释,签名,或符号整数结果    - 无符号,或无符号整型结果    - 长,签订长,长整型,或签订长整型结果    - 无符号长,或unsigned long int类型结果    - 很长很长,长签订长,很长很长整型,或签订长期长整型结果    - 无符号长长或unsigned long的长整型结果    - 浮结果    - 双点击    - 长双点击    - _Bool结果    - 浮动_Complex结果    - 双_Complex结果    - 长双_Complex结果    - 原子类型说明符结果    - 结构或联合说明符结果    - 枚举符结果    - typedef名称

因此,在unsigned int的情况下,我们可以写unsignedunsigned int,或者我们都感到疯狂,int unsigned。因为标准,后者是愚蠢的,足以让“......可以以任何顺序出现,可能是混合”。这是语言的已知的缺陷。

恰当的C代码使用unsigned int

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top