为什么默认情况下 char 是无符号的而 int 是有符号的?
Why char is unsigned and int is signed by default?
我使用 gcc 作为我的 c++ 编译器,当我声明一个 int 数据类型的变量时,默认情况下它被视为已签名。但在 char 的情况下,它被视为无符号。
这是为什么 ?
因为在 xcode IDE 中,默认情况下 char 被视为已签名。
#include<iostream>
using namespace std;
int main() {
system("clear");
int x;
char y;
cout<<INT_MIN<<" "<<INT_MAX<<endl;
cout<<CHAR_MIN<<" "<<CHAR_MAX<<endl;
return 0;
}
输出:
-2147483648 2147483647
0 255
char
在你的系统上是一个无符号类型,因为实现你系统的人选择它应该是无符号的。这种选择因系统而异,C++ 语言指定允许使用任何一种。如果您希望编写跨不同系统工作的程序,您不能假设一种选择。
请注意,无论 char
是否签名,char
、signed char
和 unsigned char
都是三种不同的类型。相比之下,int
和 signed int
是同一类型的两个名称。
我使用 gcc 作为我的 c++ 编译器,当我声明一个 int 数据类型的变量时,默认情况下它被视为已签名。但在 char 的情况下,它被视为无符号。 这是为什么 ? 因为在 xcode IDE 中,默认情况下 char 被视为已签名。
#include<iostream>
using namespace std;
int main() {
system("clear");
int x;
char y;
cout<<INT_MIN<<" "<<INT_MAX<<endl;
cout<<CHAR_MIN<<" "<<CHAR_MAX<<endl;
return 0;
}
输出:
-2147483648 2147483647
0 255
char
在你的系统上是一个无符号类型,因为实现你系统的人选择它应该是无符号的。这种选择因系统而异,C++ 语言指定允许使用任何一种。如果您希望编写跨不同系统工作的程序,您不能假设一种选择。
请注意,无论 char
是否签名,char
、signed char
和 unsigned char
都是三种不同的类型。相比之下,int
和 signed int
是同一类型的两个名称。