如果在c++中:char x = short y
What happens if : char x = short y in c++
就像标题所说的,我有这样的代码:
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;
}