这个程序为什么会进入死循环输出*?

img


这个程序为什么b的值最后为-1?
下面的*为什么会进入死循环?

建议博主学习一下进制转换与原码反码补码 当发生截断时,11111111 为-1的原码 ,所以b的值为-1
如果为无符号时,例如11111111 首位就不当做符号位了,所有的都算是值,当被减到00000000再减一次11111111 按照无符号计算值为255 由此进入了死循环

无符号的数值永远是大于等于0, i是一个无符号整形

没看到for后的全部内容,不过就问题而言应该不影响
b为什么是-1,要知道int的二进制存储是补码
补码怎么算?正数的补码是源码本身,负数是反码+1
以8位为例,-1为负数,1的源码 00000001,补码就是反码11111110+1=11111111,b的输入是0b开头,也就是二进制,对比一下二进制的值和-1的补码吧
至于为什么死循环,更简单,i是无符号类型,所以i永远满足>=0,因为无符号类型会把有符号的负数转成正数,也就是符号为照常用于二进制计算,超出范围就自动溢出,溢出后还是无符号,还是>=0