默认情况下,决定整数类型是唱歌或无符号的类型

What decides an integral type is singed or or unsigned by default?

本文关键字:类型 无符号 决定 整数 默认 情况下      更新时间:2023-10-16

bool和扩展字符类型外,整型 可以签名或未签名(34页C++入门5ed(

"可能是">,让我感到困惑,但是,请不要给出这样的答案,例如,当您在声明中明确写下它们时,我不是在问intunsigned 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默认情况下是唱片整数。

所以问题就像标题所说:

决定整数类型是有符号还是无符号的因素

除了char之外,整型的符号性在 C 和 C++ 标准中是显式指定的,或者通过类型需要实现的范围的简单推论来指定。

char的符号性由 C 和 C++ 的特定实现决定;即通常由编译器决定。并且将做出最适合硬件的选择。

请注意,charsigned charunsigned char 都是不同的类型,就像 intlong 是不同的类型一样,即使它们具有相同的大小和互补方案。

例如,分配也不是一个特别好的主意,

numeric_limits<long>::min(); 

对于int值,其行为可能是未定义的。为什么不使用

auto foo = numeric_limits<whatever>::min();

相反?