c - 为什么将 uint8_t 与整数相乘会得到 0?

标签 c for-loop

我尝试编写一个程序,但我遇到了一小段问题。

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/

相关文章:

c - program.exe 编译后停止工作?

c - C中的梯形规则,错误答案

将我的链表转换为双向链表,但在 insertHead 处访问前一个时出现问题

json - 分页不适用于 JqGrid 中的 json

python - For循环确定加权平均python

c++ - 尝试在 for 循环中使用 2 个列表迭代器

c 编程 - 来自 DIR* 结构的目录名

c - 编译后偶尔会死机

ios - 如何在 Swift 的嵌套 for 循环中访问父索引?

python - 在 Python 2.7 中计算和存储函数输出?