我知道无符号整数只是正数(和0),并且与普通int相比可以加倍。
之间有什么区别吗?int variable = 12;
和
signed int variable = 12;
何时以及为何使用signed关键字?
答案 0 :(得分:90)
只有一个实例可能需要使用signed
关键字。 signed char
总是与" plain"不同的类型。 char
,可能是签名或无符号类型,具体取决于实现。
C ++ 14 3.9.1 / 1说:
实现定义
char
对象是否可以保存负值。可以明确声明字符unsigned
或signed
。简单char
,signed char
和unsigned char
是三种不同的类型[...]
在其他情况下,signed
是多余的。
在C ++ 14(和C)之前,还有第二个实例:位字段。例如,int x:2;
(在类的声明中)与unsigned int x:2;
相同或与signed int x:2
相同,这是实现定义的。
C ++ 11 9.6 / 3说:
是实现定义的是普通(既未明确签名也未签名)
char
,short
,int
,long
或long long
位 - 字段已签名或未签名。
但是,由于C ++ 14已经更改,因此int x:2;
始终意味着signed int
。 Link to discussion
答案 1 :(得分:8)
在int
的情况下,没有区别。它只对char
产生影响,因为
char
是签名还是未签名,char
,signed char
和unsigned char
无论如何都是三种不同的类型。因此,如果您需要signed
(可能很少),则应使用signed char
。除此之外,我想不出一个理由。
答案 2 :(得分:4)
signed
是默认的整数类型。所以不,你给出的例子没有区别。仅在char
的情况下存在差异。
答案 3 :(得分:0)
关于int的两者之间没有区别。如果您还声明了unsigned int,那么您可能会包含单词signed for formatting,以便它们更容易排列并且可读,但出于所有意图和目的,您不需要使用signed关键字。