当初为了把0x0-0xFF打乱,因为char和unsigned char保存到内存的值都是一样的,都是十六进制(也就是-1的char和255的unsigned char做一个字节的比较时是相等的,因为十六进制都是0xFF),只是表示出来不一样而已,所以就没用unsigned char。结果就出现了上面BUG,当value=-23~-21时才会这样,count的值大于了256,跳出了循环。
原因:
打三个地址出来一看,count的地址(0x4ffc28 )- flag(0x4ffc40)等于十进制的-24,所以flag(0x4ffc40)地址开始,-23到-20是count的内存空间,且下标索引是有符号的,而-20的内存空间刚好的count的低8位,赋值为1是<256的,所以-20并不会发生跳出循环的问题。但如果是-21赋值为1,那就相当于count |= 0x100了。所以为了避问造成这样的问题,下标索引时最好都用无符号类型的,除非能100%确定没有负数。
注:windows是小端,也就是地址越大,位数越低,所以0x4ffc2b是count的低8位