C语言的整型溢出问题 int、long、long long取值范围 最大最小值「建议收藏」

C语言的整型溢出问题 int、long、long long取值范围 最大最小值「建议收藏」溢出和取值范围C语言的整型溢出问题整数溢出int、longint、longlongint占用字节疑问《C和指针》中写过:long与int:标准只规定long不小于int的长度,int不小于short的长度。double与int类型的存储机制不同,longint的8个字节全部都是数据位,而double是以尾数,底数,指数的形式表示的,类似科学计数法,因此double比

大家好,又见面了,我是你们的朋友全栈君。

溢出和取值范围

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        -128~+127
short int         2        -32768~+32767
int               4        -2147483648~+2147483647
long int          4        -2147483648~+2141483647
long long long int  8      -9223372036854775808~+9223372036854775807
unsigned int  (unsigned long)
4字节8位可表达位数:2^32=42 9496 7296  
范围:0 ~ 42 9496 7295 (42*10^8)  
 
int  (long)
4字节8位可表达位数:2^32=42 9496 7296  
范围:-21 4748 3648 ~ 21 4748 3647 (21*10^8)
 
long long (__int64)
8字节8位可表达位数:2^64=1844 6744 0737 0960 0000  
范围:-922 3372 0368 5477 5808 ~ 922 3372 0368 5477 5807 (922*10^16)

unsigned long (unsigned __int64)
8字节8位可表达位数:2^64=1844 6744 0737 0960 0000  
范围:0 ~ 1844 6744 0737 0955 1615 (1844*10^16)

最大值、最小值

在#include<climits>存有各个类型的最大值和最小值
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 ffff(7的二进制为0111,f二进制为1111)
最大负数(-1)可以表示为:0xffff ffff
最小负数可以表示为:0x8000 0000(8的二进制为1000)

负数为正数的源码取反码再取补码,过程如下:
1、-1的原码:10000000 00000000 00000000 00000001
2、得反码: 11111111 11111111 11111111 11111110
3、得补码: 11111111 11111111 11111111 11111111

最小负数没有并没有原码和反码表示,最高位为1,其余位为0。就是最小负数。
原码, 反码, 补码 详解

该如何选用类型

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/136510.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 打造自己的Android源码学习环境之四:下载Android源代码[通俗易懂]

    打造自己的Android源码学习环境之四:下载Android源代码[通俗易懂]打造自己的Android源码学习环境之四:下载Android源代码下载android代码的全部指导来自:http://source.android.com/source/index.html。如果你访问不了这个网址,可以看看这个链接。注意,需要同时在主机系统(HostOS)和虚拟系统(GuestOS)中配置hosts。0.安装所需软件0.1安装JDK参考:http://source.a

  • Pycharm配置(1)——解释器(interpreter)「建议收藏」

    Pycharm配置(1)——解释器(interpreter)「建议收藏」今天导入模块,发现出了很多错,要升级pip,但是我发现在新建的工程项目(PycharmIDE)中有pip,而我安装的Python3中,也有pip,那我升级哪一个呢?1、首先,遇到的问题是:已经安装python,dos窗口却提示“python不是内部命令或外部命令,也不是可运行的程序”解决方案:点击打开链接2、发现两者都是一样的,都是解释器(ProjectInterpreter)的问题先说一下,…

  • C 语言中负数移位运算讲解

    C 语言中负数移位运算讲解C语言中负数移位运算讲解“&lt;&lt;”、“&gt;&gt;”为移位运算符。“&lt;&lt;”为左移位运算符,即数据字节中的每个二进制位同时向左移位。如“x&lt;&lt;n”表示x中的每个二进制位同时向左移动n位。“&gt;&gt;”为右移位运算符,即数据字节中的每个二进制位同时向右移位。如“x&gt;&gt;n”表示x中的每个二进制位同时向右移动n位。下图…

  • datax(24):远程调试datax

    datax(24):远程调试datax一、datax开启远程debug1、环境本地:win10,idea专业版2020.3,datax3.0远程:CentOS6.5,datax3.02、效果3、步骤3.1远程开启debug/apps/datax/bin/datax.py/apps/datax/job/job.json-d即在后面添加-d即可,默认端口为9999,也可以自行修改datax.py文件第35行REMOTE_DEBUG_CONFIG=”-Xdebug-Xrunjdwp:transport=dt

  • 如何在MAC机器中实现移动设备WiFI上网(没有专门的无线路由器的情况)

    如何在MAC机器中实现移动设备WiFI上网(没有专门的无线路由器的情况)

  • Java如何创建文件?java创建文件流程图文详解!「建议收藏」

    Java如何创建文件?java创建文件流程图文详解!「建议收藏」用Java创建文件是非常容易的。以前我们创建文件等等行为完全通过提示来进行的,学习了java后,我们便可利用java通过命令来创建文件。1、打开您的IDE工具,并创建一个文件。2、接下来,您需要对您之前创建的文件创建一个main方法,我这里创建的文件为File_createNewFile,入下图所示:3、接下来,您需要newFile,并给它传入一个我们要创建的文件名。我们这里创建的是test.txt。4、如果您没有导包,那么就会出错,您需要导包,导入的包入下图所示。5、

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号