默认情况下,决定整数类型是唱歌或无符号的类型
What decides an integral type is singed or or unsigned by default?
除
bool
和扩展字符类型外,整型 可以签名或未签名(34页C++入门5ed(
"可能是">,让我感到困惑,但是,请不要给出这样的答案,例如,当您在声明中明确写下它们时,我不是在问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
默认情况下是唱片整数。
所以问题就像标题所说:
决定整数类型是有符号还是无符号的因素
除了char
之外,整型的符号性在 C 和 C++ 标准中是显式指定的,或者通过类型需要实现的范围的简单推论来指定。
char
的符号性由 C 和 C++ 的特定实现决定;即通常由编译器决定。并且将做出最适合硬件的选择。
请注意,char
、signed char
和 unsigned char
都是不同的类型,就像 int
和 long
是不同的类型一样,即使它们具有相同的大小和互补方案。
例如,分配也不是一个特别好的主意,
numeric_limits<long>::min();
对于int
值,其行为可能是未定义的。为什么不使用
auto foo = numeric_limits<whatever>::min();
相反?
相关文章:
- C ++中无符号位长度类型之间的隐式转换,即uint8_t,uint16_t
- 类型的大小与无符号的等效项?
- 整数类型应该显式转换(例如"int"到"无符号")还是只会增加混乱?
- 应用于无符号类型的一元减号运算符
- 为什么 Clang 和 GCC 中两个无符号整数之和的结果类型不同
- 提升不良词法强制转换:将字符串转换为无符号长整型时,无法将源类型值解释为目标
- C++,概念不适用于无符号整数作为结果类型?
- 为什么 (-i) 的类型(其中 i 是无符号的 int)仍然是无符号的 int?
- 无符号长整型和无符号 int 之间有什么区别,这 2 种类型应该如何在 c# 中封送?
- 无符号类型和C++
- C++和无符号类型
- 在 c++ 中将结构类型转换为无符号字符*
- QT QT QBYTEARRAY无符号数据类型
- C++无符号字符串类型的正则表达式
- 是否有理由对非负常量使用无符号类型?
- 错误:成员引用基类型"uint32_t"(也称为"无符号 INT")不是结构或联合
- 是无符号的int"简单类型说明符"
- SNMP 类型无符号32 的正确编码是什么
- 依靠任何数字类型(无符号、整数等)的隐式提升来加倍是否安全
- C++ - 数组类型"无符号__int64 [金额*]"不可分配