小编p21*_*esk的帖子

uint8_t 和 int8_t 转换

考虑以下程序:

using namespace std;

int main()
{
    uint8_t b = 150;
    int8_t a = -10;
    
    if (a>b){
        cout << "greater" << endl;
    }
    else{
        cout << "less" << endl; 
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在线 C++14 编译器中,它打印less. 我在使用 x86-64 gcc 12.2 的编译器资源管理器中得到相同的结果

根据文档

否则,操作数具有整数类型(因为此时升级了 bool、char、char8_t、(C++20 起) char16_t、char32_t、wchar_t 和无作用域枚举)产生普通类型,如下:

  1. 如果两个操作数均带符号或均无符号,则具有较小转换等级的操作数将转换为具有较大整数转换等级的操作数。
  2. 否则,如果无符号操作数的转换等级大于或等于有符号操作数的转换等级,则有符号操作数将转换为无符号操作数的类型。
  3. 否则,如果有符号操作数的类型可以表示无符号操作数的所有值,则无符号操作数将转换为有符号操作数的类型。
  4. 否则,两个操作数都将转换为有符号操作数类型的无符号对应项。

在使用 x86-64 gcc 12.2 的编译器资源管理器中,我对其进行了编译并得到以下结果:

.LC0:
        .string "greater"
.LC1:
        .string "less"
main:
        push    rbp
        mov     rbp, rsp
        sub     rsp, 16 …
Run Code Online (Sandbox Code Playgroud)

c++ type-conversion

0
推荐指数
1
解决办法
368
查看次数

标签 统计

c++ ×1

type-conversion ×1