最近在读Computer Systems A Programmers Perspective,其中第二章有道练习题
这是段因为有符号数与无符号数隐式转换所造成的有问题的代码 ,下边是作者的解释
作者说将循环中的判断条件改为 i < length 可以修复此问题,其实不见得,理由如下:
unsigned (unsigned int)的范围为0 - 0xFFFFFFFF,加入length大于0x80000000,则会造成i溢出会为负数,此时循环体中a[i]就会访问位置区域而产生错误。
在编写C程序时要特别注意有符号数与无符号数隐式转换所造成溢出等问题。