我尝试编写一个程序,但我遇到了一小段问题。
for(uint8_t i = 1; i < MAX_BIT_VALUE; i*=2){
printf("Current value of i: %u\n", i);
}
当我运行这个片段时,我得到这个输出:
Current value of i: 0
Current value of i: 0
Current value of i: 0
Current value of i: 0
无限循环。我不明白为什么。 uint8_t
是一个 8 位无符号整数。我只是将值为 1 的 i
乘以 2。它怎么可能变成 0?
但是,如果我将 i
的数据类型更改为 int
,它就可以正常工作:
Current value of i: 1
Current value of i: 2
Current value of i: 4
Current value of i: 8
Current value of i: 16
...
我试图在网上找到可能的答案,但我不知道如何用问题的措辞来获得答案。你们能帮帮我吗?
最佳答案
除了打印时其他答案推荐的问题外,您还有以下问题:
- 将 i==128 乘以 2
- 结果 256
- 将 256 (0x100) 存储在无符号的 8 位中,结果为 0,
因为 8 位要变窄 - 0乘以2
- 结果 0
- 0 < 255 -> 无限循环
关于c - 为什么将 uint8_t 与整数相乘会得到 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45962994/