何时在赋值期间进行隐式类型转换

时间:2012-11-26 13:37:17

标签: c++ casting

如果获得以下代码:

uint8_t value   = 0xF0;
uint16_t shift  = 0x10;
uint32_t result = value << shift;

cout << "The Result is: " << result << endl;

我预计输出为0但是它是15728640。

我的问题

  • 评估的表达式不是=&gt; 0然后隐式转换 到结果的类型?
  • 这种行为是标准的吗?
  • 我在哪里可以获得有关此类行为的更多信息?

3 个答案:

答案 0 :(得分:2)

当您撰写value << shift时,value会在轮班之前隐式转换为int。这称为“整数提升”。没有其他规则适用于这种特殊情况。

整数提升适用于范围适合int的任何类型。如果它不适合int,则尝试unsigned int。如果它不适合,那么整数提升什么都不做。

有关更多信息......好吧,我刚刚阅读了规范。

答案 1 :(得分:1)

移位操作涉及“整数提升”,这意味着将比int更窄的类型转换为int。促销在转变之前完成,因此您所看到的行为是预期的。

答案 2 :(得分:0)

如果您正在使用32位或64位字机器,则移位将在32位或64位寄存器中。也就是说,8位“值”被加载到寄存器中,移位,然后(如果需要)截断为最终变量。

这就是为什么“int”的长度取决于实现。