C++ 中有符号、有符号 int 和 int 之间的区别?
Difference between signed, signed int and int in C++?
C++中int
、signed int
、signed
的数据类型有区别吗?
并且:
如果它们在内存中处理所有相同数量的 space (它们在内存分配的上下文中是等效的),那么在 compile-/run-time 之间是否存在性能差异(当然不会对于像下面这样的程序很重要但是在初始化数百个该类型的变量时)?
我对其中任何一个进行了测试,以查看是否存在任何显着差异或任何编译器警告或错误:
与signed int
:
#include <iostream>
int main()
{
signed int a = 5;
std::cout << "The number entered is " << a << std::endl;
return 0;
}
与int
:
#include <iostream>
int main()
{
int a = 5;
std::cout << "The number entered is " << a << std::endl;
return 0;
}
与signed
:
#include <iostream>
int main()
{
signed a = 5;
std::cout << "The number entered is " << a << std::endl;
return 0;
}
所有测试的输出都是等效的:
The number entered is 5
但这并不意味着它在内存存储和性能方面必须相同。
提前致谢。
您可以阅读有关指定整数类型的规则 here。
第一个相关规则是,如果您不提供 signed
或 unsigned
,编译器将假定 signed
.
signed
- target type will have signed representation (this is the default if omitted)
另一个规则是,如果您提供 signed
或 unsigned
而没有大小,则假定为 int
。所以 int
、signed int
和 signed
在功能上完全等价。
int
- basic integer type. The keyword int may be omitted if any of the modifiers listed below are used.
编辑:您可以使用 sizeof
operator (ex. sizeof(int)
or sizeof(a)
) and the range of values a numeric type can represent using std::numeric_limits
(例如 std::numeric_limits<int>::max()
)检查类型的大小(以字节为单位)。
Is there a difference between the datatypes of int
, signed int
and
signed
in C++?
没有
这些类型完全相同。每个 Table 12: simple-type-specifiers and the types they specify signed
、signed int
和 int
都有类型 int
唯一可以应用 signed
但不适用于 (signed T == T
) 的整数类型是 char
。有 char
类型 char
和 signed char
类型 signed char
。如果在您的实现中 char
被实现为 signed char
代码,例如
static_assert(std::is_same_v<char, signed char>)
将始终触发断言,因为即使它被实现为 signed char
,因为 char
本身是它自己的不同类型,只会与 char
进行相同的比较。
C++中int
、signed int
、signed
的数据类型有区别吗?
并且: 如果它们在内存中处理所有相同数量的 space (它们在内存分配的上下文中是等效的),那么在 compile-/run-time 之间是否存在性能差异(当然不会对于像下面这样的程序很重要但是在初始化数百个该类型的变量时)?
我对其中任何一个进行了测试,以查看是否存在任何显着差异或任何编译器警告或错误:
与signed int
:
#include <iostream>
int main()
{
signed int a = 5;
std::cout << "The number entered is " << a << std::endl;
return 0;
}
与int
:
#include <iostream>
int main()
{
int a = 5;
std::cout << "The number entered is " << a << std::endl;
return 0;
}
与signed
:
#include <iostream>
int main()
{
signed a = 5;
std::cout << "The number entered is " << a << std::endl;
return 0;
}
所有测试的输出都是等效的:
The number entered is 5
但这并不意味着它在内存存储和性能方面必须相同。
提前致谢。
您可以阅读有关指定整数类型的规则 here。
第一个相关规则是,如果您不提供 signed
或 unsigned
,编译器将假定 signed
.
signed
- target type will have signed representation (this is the default if omitted)
另一个规则是,如果您提供 signed
或 unsigned
而没有大小,则假定为 int
。所以 int
、signed int
和 signed
在功能上完全等价。
int
- basic integer type. The keyword int may be omitted if any of the modifiers listed below are used.
编辑:您可以使用 sizeof
operator (ex. sizeof(int)
or sizeof(a)
) and the range of values a numeric type can represent using std::numeric_limits
(例如 std::numeric_limits<int>::max()
)检查类型的大小(以字节为单位)。
Is there a difference between the datatypes of
int
,signed int
andsigned
in C++?
没有
这些类型完全相同。每个 Table 12: simple-type-specifiers and the types they specify signed
、signed int
和 int
都有类型 int
唯一可以应用 signed
但不适用于 (signed T == T
) 的整数类型是 char
。有 char
类型 char
和 signed char
类型 signed char
。如果在您的实现中 char
被实现为 signed char
代码,例如
static_assert(std::is_same_v<char, signed char>)
将始终触发断言,因为即使它被实现为 signed char
,因为 char
本身是它自己的不同类型,只会与 char
进行相同的比较。