如果在c++中:char x = short y

What happens if : char x = short y in c++

本文关键字:short char c++ 如果      更新时间:2023-10-16

就像标题所说的,我有这样的代码:

void Emulator::cpu16BitLoad(char& hi, char& lo)
{
    m_cyclesThisUpdate += 12;
    short n = readShort();
    m_programCounter += 2;
    lo = n;
    hi = n << 8;
}

我想知道变量'lo'是否包含n的最后8位

根据标准章节4.7整型转换 [conv_integral]

1整型的右值可以转换为另一种整型的右值类型。非作用域的右值枚举类型可以转换为整型的右值。

2如果目的类型为unsigned,则结果值最小无符号整数与源整数(对2n取模,其中n为用于表示无符号类型的位数)。[备注:-end note]

3如果对目的类型进行了签名,则在允许的情况下保持值不变以目标类型(和)表示位域宽度);否则,该值为实现定义。

那么,给定目标类型为"char"它实际上可以签名(通常)或不签名。对于后一种情况,编译器只需要取后面的8位。

你应该这样写:

void load(unsigned char &lo)
{
    unsigned short val = /* get it somewhere */;
    lo = val;
}