C ++中的无符号关键字


87

在C ++中,unsigned关键字是否默认为特定数据类型?我正在尝试为原型的类编写一个函数:

unsigned Rotate(unsigned object, int count)

但是我真的不明白是什么unsigned意思。不应该是这样unsigned int吗?

Answers:


92

从上面的链接

可以使用关键字sign,unsigned,short和long修改其中几种类型。当单独使用这些类型修饰符之一时,将假定数据类型为int

这意味着您可以假设作者使用的是整数。


是否允许C99和MISRA这样做?
nowox

42

整数类型:

short            -> signed short
signed short
unsigned short
int              -> signed int
signed int
unsigned int
signed           -> signed int
unsigned         -> unsigned int
long             -> signed long
signed long
unsigned long

注意字符:

char  (is signed or unsigned depending on the implmentation)
signed char
unsigned char

1
@Firas:我知道它在C中。Implicitint既不是ISO C99的一部分,也不是ISO C ++的一部分
Prasoon Saurav 2010年

4
在C ++中,使用“ unsigned”(本身)来声明“ unsigned int”类型是标准的。在当前标准中:7.1.5.2 [dcl.simple.type]有一个表,用于将每个类型声明标识为所使用的实际类型。该表具有从“无符号”声明到“无符号int”类型的对应关系。
大卫·罗德里格斯(DavidRodríguez)-dribeas 2010年

2
请注意,char的行为与有符号的char或无符号的char相同,但是无论如何都保持为单独的类型。

@Firas:请参见第3.9.1节“基本类型”。Paragrah 2:<quote>有五种标准的带符号整数类型:“ signed char”,“ short int”,“ int”,“ long int”和“ long long int”。</ quote>
Martin York

21

unsigned关键字默认为C ++中的数据类型吗

是的,有符号和无符号也可以用作独立类型说明符

整数数据类型char,short,long和int可以根据需要表示的数字范围进行签名或不签名。有符号类型可以代表正值和负值,而无符号类型只能代表正值(和零)。

包含n位的无符号整数可以具有0到2 n -1之间的值(这是2 n个不同的值)。

但是,signed和unsigned也可以用作独立类型说明符,分别与signed int和unsigned int相同。以下两个声明是等效的:

unsigned NextYear;
unsigned int NextYear;

3
那不是吗?如果不使用类型,则默认为int?
放松

谢谢!英语不是我的母语,我对无符号数据类型的含义感到困惑。它包含谁的签名?我从没想到它可能来自名词符号...:D
user74200 '17

关键字shortlong也是类型修饰符。如果你写的话short s,那实际上意味着short int s,就像unsigned u真正意味着一样unsigned int u。(和unsigned short手段unsigned short int
Ben Voigt

8

您可以在《 C ++参考》中了解有关unsigned关键字的信息。

此问题有两种不同的类型,有符号的和无符号的。整数的默认值是带符号的,这意味着它们可以具有负值。

在32位系统上,整数是32位,这意味着它可以包含〜40亿的值。

当签署时,这意味着您需要将其拆分,剩下的-20亿到+20亿。

但是,当它为无符号时,该值不能包含任何负数,因此对于整数,这将意味着0到+40亿。

有关更多信息,请参阅Wikipedia


2
我喜欢自己为大多数事情唱歌。美味的碳和焦糖化!
2010年

1
怎么样编辑错别字?...这就是“编辑”按钮的作用!
Filip Ekberg

3

是的,这意味着unsigned int。以前是如果您没有在C语言中指定数据类型,那么在许多地方它只是在假定int。例如,尝试使用函数返回类型。

该疣已基本消灭,但您在这里遇到的最后遗迹。恕我直言,代码应该固定不变,unsigned int以避免您遇到的那种混乱。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.