1、溢出 只有符号的数才会发生溢出。对于signed整型的溢出,C的规范定义是“undefined behavior”,也就是说,编译器爱怎么实现就怎么实现。对于大多数编译器来说,仍然是回绕。 2、回绕无符号数会回绕(常绕过一些判断语句)。对于unsigned整型溢出,C的规范是有定义的——“溢出后的数会以2^(8* sizeof(type))作模运算”,也就是说,如果一个unsigned char(1字符,8bits)溢出了,会把溢出的值与256求模。例如: unsigned char x = 0xff;
printf("%d\n", ++x);
上面的代码会输出:0 (因为0xff + 1是256,与2^8求模后就是0) 3、截断将一个较大宽度的数存入一个宽度小的操作数中,高位发生截断
|