【发布时间】:2018-06-02 11:58:19
【问题描述】:
A和B的取值结果如下。
【问题讨论】:
-
原因是隐式整数提升。 SO上有很多类似的问题。研究链接的副本。
A和B的取值结果如下。
【问题讨论】:
第一种情况,右侧表达式的类型为int,值为-121。第二种情况,类型为uint32_t,值为uint32_t(-121) == 4294967175。后者无法在float 中精确表示,因此会被四舍五入。
【讨论】:
uint8_t 是无符号类型,但当用作移位操作的左操作数时,它会被提升为int,而不是unsigned int。最后一个有符号左移的结果是一个负的 int 值(从技术上讲,我相信符号变化符合溢出的条件),当转换为 float 时它仍然是负数。