为什么不建议使用无符号整型,无符号整型能产生哪些bug?
《C专家编程》有这么几行代码。
#include一个数组,一个宏定义,宏的作用就是计算数组的元素个数。int array[] = {23, 34, 12, 17, 204, 99, 16}; #define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0])) int main() { int d = -1, x; /* ... */ if (d <= TOTAL_ELEMENTS - 2) x = array[d + 1]; /* ... */ return 0; }
10000000 00000000 00000000 00000001
11111111 11111111 11111111 11111110 11111111 11111111 11111111 11111111
4294967295
尽量不要在你的代码中使用无符号类型,以免增加不必要的复杂性。尤其是,不要仅仅因为无符号数不存在负值(如年龄、国债)而用它来表示数量。
尽量使用像 int 那样的有符号类型,这样在涉及升级混合类型的复杂细节时,不必担心边界情况(如 -1 被翻译为非常大的正数)。
只有在使用位段和二进制掩码时,才可以用无符号数。应该在表达式中使用强制类型转换,使操作数均为有符号数或者无符号数,这样就不必由编译器来选择结果的类型。
嵌入式开发中使用无符号的场景很多,操作地址、寄存器等等,尤其是做单片机等等一些底层开发,随处可见 unsigned 字样,这也是由硬件特性决定。使用的时候多加注意,尤其是做一些基本运算的时候。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !