
溢出和取值范围C语言的整型溢出问题整数溢出int、long int 、long long int 占用字节疑问《C和指针》中写过long与int标准只规定long不小于int的长度int不小于short的长度。double与int类型的存储机制不同long int的8个字节全部都是数据位而double是以尾数底数指数的形式表示的类似科学计数法因此double比int能表示的数据范围更广。long long在win32中是确实存在长度为8个字节定义为LONG64。为什么会出现long int呢在win32现在系统中长度为4在历史上或者其他某些系统中int长度为2是short int。即便是long long在TI的有款平台中长度为5也就是说每种类型长度需要sizeof才知道如果可能最好用union看看里面的数据可以消除一些类型的假象长度。类型名称 字节数 取值范围 signed char 1 -128127 short int 2 -3276832767 int 4 -21474836482147483647 long int 4 -21474836482141483647 long long long int 8 -92233720368547758089223372036854775807unsigned int unsigned long 4字节8位可表达位数2^3242 9496 7296 范围0 42 9496 7295 (42*10^8) int long 4字节8位可表达位数2^3242 9496 7296 范围-21 4748 3648 21 4748 3647 (21*10^8) long long (__int64) 8字节8位可表达位数2^641844 6744 0737 0960 0000 范围-922 3372 0368 5477 5808 922 3372 0368 5477 5807 (922*10^16) unsigned long (unsigned __int64) 8字节8位可表达位数2^641844 6744 0737 0960 0000 范围0 1844 6744 0737 0955 1615 (1844*10^16)最大值、最小值在#include存有各个类型的最大值和最小值 CHAR_MIN char的最小值 SCHAR_MAX signed char 最大值 SCHAR_MIN signed char 最小值 UCHAR_MAX unsigned char 最大值 SHRT_MAX short 最大值 SHRT_MIN short 最小值 USHRT_MAX unsigned short 最大值 INT_MAX int 最大值 INT_MIN int 最小值 UINT_MAX unsigned int 最大值 UINT_MIN unsigned int 最小值 LONG_MAX long最大值 LONG_MIN long最小值 ULONG_MAX unsigned long 最大值 FLT_MANT_DIG float 类型的尾数 FLT_DIG float 类型的最少有效数字位数 FLT_MIN_10_EXP 带有全部有效数的float类型的负指数的最小值以10为底 FLT_MAX_10_EXP float类型的正指数的最大值以10为底 FLT_MIN 保留全部精度的float类型正数最小值 FLT_MAX float类型正数最大值自己推算以int类型为例int为4字节32位其中首位用0表示正数用1表示为负数。因此对于最大正数可以表示为0x7fff ffff7的二进制为0111f二进制为1111最大负数-1可以表示为0xffff ffff最小负数可以表示为0x8000 00008的二进制为1000负数为正数的源码取反码再取补码过程如下1、-1的原码10000000 00000000 00000000 000000012、得反码 11111111 11111111 11111111 111111103、得补码 11111111 11111111 11111111 11111111最小负数没有并没有原码和反码表示最高位为1其余位为0。就是最小负数。原码, 反码, 补码 详解该如何选用类型