2010-08-05 46 views

回答

15

平原int相同signed相同signed int

+0

一些(全部?)编译器有一个开关来将默认值更改为无符号。在MSVC中,它是/ J。 – 2010-08-05 11:43:54

+1

供参考默认情况下,Microchip PIC控制器的CCS编译器未经签名。哎呀! – kenny 2010-08-05 11:45:54

+9

/J编译器开关影响char,而不是int。 “char”可能会或可能不会被签名。 “char”,“signed char”和“unsigned char”总是不同的类型,不管是否有“char”被签名。 – 2010-08-05 11:47:37

2

int S按默认签名。

12

C++标准3.9.1/2:

有四个符号整型:“长整型”,“符号字符”,“短整型”,“INT”,和< ...>

C++标准3.9.1/3:

对于每个符号整数类型,有Ë xists相应的(但不同无符号整型: “无符号字符”,“无符号短整型”,“无符号整型”和“无符号长 整型,” < ...>

因此,sizeof(int)等于sizeof(unsigned)。但boost::is_same< int, unsigned >::value是错误的。

+1

+1引用标准。 – Cumbayah 2010-08-05 12:13:10

1

signed intint相同,并指定可以同时具有正值和负值的整数值。

unsigned int另一方面只能有正值,所以最大正值远大于signed int

+0

实际上,*范围*的值是完全相同的大小,它只是移位,所以最小值为0. – 2010-08-05 11:45:03

+0

你说得对,那是一个糟糕的选择。固定;) – 2010-08-05 12:10:44

3

ints是默认签名的,与longs一样。

所以,int,signedsigned int是一样的东西。

类似地longsigned long是相同的。

chars另一方面,没有默认值。实现可以认为它们是有符号或无符号的(许多命令行开关可供选择)。 char,signed charunsigned char被认为是重载决议,模板实例和其他地方的三种不同类型。

+0

最后一句太受限制了。这不仅仅是重载解决方案,它无处不在。例如。也作为模板参数。因此,'std :: vector '与'std :: vector '是相同的类型,但是'std :: vector '不是**与'std :: vector ' – MSalters 2010-08-05 12:24:45

+0

@MSalters相同的类型:好点,更新。 – 2010-08-05 13:49:49

相关问题