gpt4 book ai didi

c++ 内在类型之间的隐式类型转换

转载 作者:行者123 更新时间:2023-11-30 02:01:35 24 4
gpt4 key购买 nike

在 C++ 内在类型的二元运算符中,两个操作数应该具有相同的类型,否则,一个操作数将根据层次结构转换为另一个操作数的类型:

long double
double
float
unsigned long long int
long long int
unsigned long int
long int
unsigned int
int

我的问题是:为什么 unsigned TT 更高级。这只是一个任意选择,还是将 T 转换为 Unsigned T 而不是相反有一些优势。

更新:

//where `unsigned int` to `int` work better.
int a=-3;
unsigned int b=3;
cout << a+b; /* this will output the right result if b get converted to int,
which is not what really happen.*/

//where `int` to `unsigned int` work better.
int a=3;
unsigned int b=pow(2,20);
cout << a+b; /* this will output the right result if a get converted to unsigned int,
which is fortunately what really happen.*/

所以我看不出将 T 转换为 Unsigned T 比反过来有更多优势。

最佳答案

它本质上是一种任意选择,可以追溯到 C 语言的早期。

据我所知,在准标准 K&R C 中,规则基本上是如果运算符的操作数具有无符号类型,则结果也将是无符号的(这称为无符号保留)。

当 C 标准化后,此规则更改为 C 和 C++ 当前使用的规则,允许删除无符号属性,只要该值可以在目标类型中表示(这称为值-保存)。原因是新规则在进行混合有符号/无符号算术时为毫无戒心的程序员提供了更少的惊喜。

Tunsigned T的转换可以有两种解释:

  1. 这是对旧(无符号保留)规则的保留。
  2. 对于诸如 1ULL > -1LL 之类的东西,唯一不需要大于 unsigned long long 的类型是明智的做法,因为有符号到无符号始终定义转换(凭借无符号整数的环绕特性),但反向转换不是。

关于c++ 内在类型之间的隐式类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14004346/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com