2147483648
C 语言的数据类型包括:整型、字符型、实型或浮点型(单精度和双精度)、枚举类型、数组类型、结构体类型、共用体类型、指针类型和空类型。 C语言的整形,分类两类,一种是有符号的(正数/负数),一种是无符号的(默认是大于等于零); 无符号整形,默认重0开始,永远不可能有负数; 有符号整形有正负区间(包含大于0和小于0两个区间),实际上总长度和无符号整形一样; 目前的操作系统已发展到64位操作系统,但因程序编译工艺的不同,两者表现出不同的差别: 32位编译系统:int占四字节,与long相同,范围是-2147483648~2147483647; 64位编译系统:int占四字节,long占8字节,long数据范围变为:-2^63 ~ 2^63-1; 由此可见:当 int 型整数超出自己范围时,会从它的最小值重新开始!三.C语言浮点型float/double float 整数部分取值范围:能表达式万亿级别,已经够大了,实际开发完全够用; float 小数部分取值范围:最多只能精确到小数点后6位; double 整数部分取值范围:比float更大,脑补就行了…. double 小数部分取值范围:最多只能精确到小数点后15位; 由上面可以看出,float 类型的小数点最多只能精确到第 6 位,第 7 位开始就已经不准确了,而 double 类型可以精确到15位,一般项目中使用 float 类型已经完全足够了;
最后查到问题了,是因为abs(INT_MIN)是未定义行为,在编译器优化了之后产生了奇怪的结果。 这个未定义行为不在于“有符号数转无符号数”,C的中定义的abs()函数的原型是int abs(int);,返回值仍为int而非unsigned。 发生未定义行为的原因在于abs(INT_MIN)的返回值不能由它的类型(int)表示
float 定义浮点型变量(浮点型就是保存小数的) 整形变量自然就是保存整数的变量。为什么要把整数和小数分开呢? 这是因为,在二进制中,只有0和1,没有小数点,因此整数和小数在计算机看来,都是1和0的组合,没有什么区别。 而我们把某一块数据看作小数,那么他就是小数,把它看作整数,他就变成了整数
