除
bool
和扩展字符类型外,还有整数类型 可能签名或未签名(34页。 C ++ Primer 5ed)
"可能是" ,让我感到困惑,但是,请不要提供answer,我不要问区别例如,当您在声明中明确写下它们时,int
和unsigned int
。我想知道类型char, short, int, long, long long
在什么条件下被烧焦或未签名
我在我的Mac上编写了一个简单的测试代码,并由GNU编译器编译,它告诉我char
已被烧焦
#include <iostream>
#include <limits>
using namespace std;
int main( int argc, char * argv[] )
{
int minChar = numeric_limits<char>::min();
int maxChar = numeric_limits<char>::max();
cout << minChar << endl; // prints -128
cout << maxChar << endl; // prints 127
return 0;
}
同样的机制适用于所有可签名的整数类型,结果如下所示。
minOfChar: -128
maxOfChar: 127
minOfShort: -32768
maxOfShort: 32767
minOfInt: -2147483648
maxOfInt: 2147483647
minOfLong: 0 // This is interesting, 0
maxOfLong: -1 // and -1 :p
minOfLongLong: 0 // shouldn't use int to hold max/min of long/long long #Bathsheba answered below
maxOfLongLong: -1 // I'll live this error unfixed, that's a stupid pitiful for newbies like me, also good for leaning :)
结果告诉我,对于在Mac上由g ++编译的char, short, int, long, long long
,默认情况下是整数。
所以问题正如标题所示:
什么决定整数类型是烧焦的还是未签名的
答案 0 :(得分:3)
除了char
之外,整数类型的签名在C和C ++标准中明确指定,或者通过类型需要实现的范围的简单推论来指定。
char
的签名由C和C ++的特定实现决定;即它通常由编译器决定。并且将做出最佳选择以适应硬件。
请注意,char
,signed char
和unsigned char
都是不同的类型,与int
和{{1}的方式非常相似即使它们具有相同的大小和补充方案,它们也是不同的类型。
例如,分配
也不是一个特别好的主意long
到numeric_limits<long>::min();
值,其行为可能未定义。为什么不使用
int
代替?