C里面有一个默认的规则集合来自动完成类型转换。其中有两条转换规则如下:
1.在包含两种数据类型的任何运算里,两个值都被转换成两种类型里面的较高级别。
2.类型级别从高到低的顺序是long double, double, float, unsigned long long, long long, long, unsigned int 和 int.
所以你的例子的运算默认都会转为32位无符号运算。无符号就是没有负数了,0 - 1 = 0xFFFFFFFF
计算机里面有一个基础概念就是只有0和1. 内在里面存放着32个1, 你上层是有符号的类型就显示-1,无符号类型就显示0xFFFFFFFF
|