-4

The result of the values โ€‹of A and B is as follows.

hyunoh lee
  • 11
  • 3
  • The reason is implicit integer promotion. There are many similar questions all over SO. Study the linked duplicate. โ€“ Lundin Dec 20 '17 at 10:38

1 Answers1

0

In the first case, the type of the expression on the right-hand side is int, and the value is -121. In the second case, the type is uint32_t, and the value is uint32_t(-121) == 4294967175. The latter cannot be precisely represented in a float, so it gets rounded.

Igor Tandetnik
  • 50,461
  • 4
  • 56
  • 85
  • 1
    I think the subtlety here is that while `uint8_t` is an unsigned type, when used as the left operand of a shift operation, it gets promoted to `int`, not `unsigned int`. The result of the last signed left shift results in a negative `int` value (and technically, I believe the sign change qualifies as overflow), which remains negative when converted to `float`. โ€“ Tom Karzes Dec 20 '17 at 02:00