C++ 中的INT_MAX,INT_MIN数值大小操作

int占4字节32位,根据二进制编码的规则,

INT_MAX = 2^31-1=2147483647

INT_MIN= -2^31=-2147483648

C/C++中,所有超过该限值的数,都会出现溢出,出现warning,但是并不会出现error。

如果想表示的整数超过了该限值,可以使用长整型long long 占8字节64位。

补充:C++ 数值最大最小标识符一网打尽,INT_MIN/ INT_MAX/LONG_MIN/LONG_MAX 等等

我就废话不多说了,大家还是直接看代码吧~

Constant Meaning Value
CHAR_BIT Number of bits in the smallest variable that is not a bit field. 8
SCHAR_MIN Minimum value for a variable of type signed char. -128
SCHAR_MAX Maximum value for a variable of type signed char. 127
UCHAR_MAX Maximum value for a variable of type unsigned char. 255 (0xff)
CHAR_MIN Minimum value for a variable of type char. -128; 0 if /J option used
CHAR_MAX Maximum value for a variable of type char. 127; 255 if /J option used
MB_LEN_MAX Maximum number of bytes in a multicharacter constant. 5
SHRT_MIN Minimum value for a variable of type short. -32768
SHRT_MAX Maximum value for a variable of type short. 32767
USHRT_MAX Maximum value for a variable of type unsigned short. 65535 (0xffff)
INT_MIN Minimum value for a variable of type int. -2147483647 - 1
INT_MAX Maximum value for a variable of type int. 2147483647
UINT_MAX Maximum value for a variable of type unsigned int. 4294967295 (0xffffffff)
LONG_MIN Minimum value for a variable of type long. -2147483647 - 1
LONG_MAX Maximum value for a variable of type long. 2147483647
ULONG_MAX Maximum value for a variable of type unsigned long. 4294967295 (0xffffffff)
LLONG_MIN Minimum value for a variable of type long long. -9,223,372,036,854,775,807 - 1
LLONG_MAX Maximum value for a variable of type long long. 9,223,372,036,854,775,807
ULLONG_MAX Maximum value for a variable of type unsigned long long. 18,446,744,073,709,551,615 (0xffffffffffffffff)

补充:c++中short的最小值SHRT_MIN减1不是SHRT_MAX的原因

最近在看一本一直都想看的书,c++ primer plus,本来想看的是c++ primer,结果买错了,反正都差不多。

在学习short,int,long的时候,看到书中这样写到:整型变量的行为就像里程表。如果超越了限制,其值将为范围另一端的取值。这句话我是这样理解的,假如我们设置了一个int型的整数,例如 int n_int = INT_MAX; 那么,我们做 n_int+1时输出应为 INT_MIN。结果的确是这样。但是short的有点特别,虽然不常见。

下面看一段程序:

int c_char = CHAR_BIT;
int n_int = INT_MIN;
short n_short = SHRT_MIN;
long n_long = LONG_MAX;
long long n_llong = LLONG_MAX;
cout<< sizeof n_int<<" "<<sizeof n_short<<" "<<sizeof(n_short - 1)<<" "<<sizeof(n_long)<<" "<<sizeof(n_llong)<<endl;
cout<<n_int - 1<<" "<< n_short - 1 <<" "<<n_long<<" "<<n_llong<<" "<<c_char<<endl;
//n_short是short类型的最小值,理论上减1应为SHRT_MAX的值,但结果不是

下面是程序结果:

解释:

程序中定义了n_int为int型的最小值,我们输出n_int-1时发现结果是int的最大值INT_MAX。结果第二行第一个数。但是在程序的第四行我们定义了一个n_short,赋值SHRT_MIN,然后输出n_short - 1,理论上说结果应该为32767,也就是SHRT_MAX。但是结果不一样,那么结果为什么会这样呢?

我们可以看输出中的第一行,此行输出的是各个数值在计算机中占的字节数。在输出sizeof(n_short - 1)时,结果是4,也就是数n_short - 1现在是一个整型数。在c++中规定short是两个字节,也就是16位。但是在计算机中,short存储占4个字节,因此,在short超出范围的时候会自动转换成整型的数。

这里额外在说一点,c++中基本整型有5种:char、short、int、long、long long(c++11中)。这里注意,char是基本整型。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • pyinstaller打包单个exe后无法执行错误的解决方法

    1.执行环境说明 python版本3.7 直接使用pip进行安装pywin32.pyinstaller pip install pywin32 pip install pyinstaller 2.使用了第三方库的情况 建议在打包之前务必找到第三方库的包,把包复制到到跟myfile.py同目录下,然后再使用以上2种方式打包,否则会打包失败或者即使打包成功,程序也会闪退.pyinstaller -p参数是添加的pyinstaller打包程序时的扫描路径,假设venv\Lib\site-package

  • 利用pyinstaller打包exe文件的基本教程

    前言 PyInstaller可以用来打包python应用程序,打包完的程序就可以在没有安装Python解释器的机器上运行了.PyInstaller支持Python 2.7和Python 3.3+.可以在Windows.Mac OS X和Linux上使用,但是并不是跨平台的,而是说你要是希望打包成.exe文件,需要在Windows系统上运行PyInstaller进行打包工作:打包成mac app,需要在Mac OS上使用. 方法如下: 1.确保已安装python解释器 2.确认pip是否是最新版本

  • 如何使用pyinstaller打包32位的exe程序

    说明:原来安装的python为64位,故安装的pyinstaller和打包后的exe都为64位.而64位的exe文件在32位的win7操作系统下是无法执行的,显示不兼容.网上查询发现,简单(可能不方便)的方法是采用32位的python重新打包.这里,我使用的是conda构建32位python环境,然后再次打包.安装Anaconda的方法,感兴趣的可以查看.具体操作如下: 构建32位python环境 进入命令提示符窗口 set CONDA_FORCE_32BIT=1 //切换到32位 conda

  • PyInstaller的安装和使用的详细步骤

    写的一些爬虫,不想太麻烦的使用pyqt5来写界面,就简单使用pyinstaller来做一个.exe的文件 1.配置系统变量 安装需要用到pip工具,该工具在3.5版本的python中已经自带不用另行安装,但是需要在系统变量中添加python下的Scripts文件夹,如下图: 在Path变量值中添加[;(python的安装目录)\Scripts] *注意不要漏了最前面的分号 2.下载PyInstaller 官网链接:http://www.pyinstaller.org/ ↑如上图在Download

  • C++ 中的INT_MAX,INT_MIN数值大小操作

    int占4字节32位,根据二进制编码的规则, INT_MAX = 2^31-1=2147483647 INT_MIN= -2^31=-2147483648 C/C++中,所有超过该限值的数,都会出现溢出,出现warning,但是并不会出现error. 如果想表示的整数超过了该限值,可以使用长整型long long 占8字节64位. 补充:C++ 数值最大最小标识符一网打尽,INT_MIN/ INT_MAX/LONG_MIN/LONG_MAX 等等 我就废话不多说了,大家还是直接看代码吧~ Con

  • 使用Python对mongo数据库中字符串型正负数值比较大小

    数据库中数据展示: 使用python代码实现: # Requires pymongo 3.6.0+ from pymongo import MongoClient client = MongoClient("mongodb://root:88888888@192.168.124.49:27017") database = client["test-mongo"] collection = database["students2"] # Creat

  • PHP递归实现文件夹的复制、删除、查看大小操作示例

    本文实例讲述了PHP递归实现文件夹的复制.删除.查看大小操作.分享给大家供大家参考,具体如下: PHP虽然提供了 filesize.copy.unlink 等文件操作的函数,但是没有提供 dirsize.copydir.rmdirs 等文件夹操作的函数(rmdir也只能删除空目录).所以只能手动编写这些函数,主要的技巧是通过递归将问题逐层分解,直到分解成可以直接解决的最小子问题. 查看文件夹大小 由于文件夹是没有大小的,平常所说的文件夹尺寸准确的说应该是文件夹中所有文件的总大小.所以只需要将文件

  • IIS 7 中设置文件上传大小限制设置方法

    在IIS 6.0中设置文件上传大小的方法,就是配置如下节点: 复制代码 代码如下: <system.web><httpRuntime maxRequestLength="1048576" executionTimeout="600"/>        </system.web> 但在IIS7中,设置如上设置后,不管设置多大数值,最大上传了限制为30M 还要进行如下设置才能正确: 方法1: appcmd set config &qu

  • Java中对List集合的常用操作详解

    目录: 1.list中添加,获取,删除元素: 2.list中是否包含某个元素: 3.list中根据索引将元素数值改变(替换): 4.list中查看(判断)元素的索引: 5.根据元素索引位置进行的判断: 6.利用list中索引位置重新生成一个新的list(截取集合): 7.对比两个list中的所有元素: 8.判断list是否为空: 9.返回Iterator集合对象: 10.将集合转换为字符串: 11.将集合转换为数组: 12.集合类型转换: 备注:内容中代码具有关联性. 1.list中添加,获取,

  • WinForm中实现picturebox自适应图片大小的方法

    本文实例讲述了WinForm中实现picturebox自适应图片大小的方法.分享给大家供大家参考,具体如下: picturebox控件共有两种载入图片方式,分别为: pictureBox1.BackgroundImage = Image,pictureBox1.load(url) 为使加载的图片自使用控件尺寸,可以分别对pictureBox控件设置BackGroundImageLayout=Stretch,SizeMode=StretchImagewinform中picturebox自适应图片大

  • linux/OSX中“DD”命令制作ISO镜像操作系统安装U盘的方法

    Linux或者OS X系统中,使用"dd"命令可以直接在终端命令行模式下,制作ISO镜像的系统安装盘. 一.linux系统以centOS7为例. sudo dd if=镜像路径  of=USB设备路径 bs=1m 镜像路径: ISO格式的镜像文件存放位置 USB路径: /dev/sdb  这里要注意的是: (1)USB设备不能已经挂载到其它目录,否则会提示出错.如果系统自动挂载,要先umount /dev/sdb . (2)/dev/sdb 的路径,不能带分区,例如 /dev/sdb1

  • YII2框架中ActiveDataProvider与GridView的配合使用操作示例

    本文实例讲述了YII2框架中ActiveDataProvider与GridView的配合使用操作.分享给大家供大家参考,具体如下: YII2中ActiveDataProvider可以使用yii\db\Query或yii\db\ActiveQuery的对象,方便我们构造复杂的查询筛选语句. 配合强大的GridView,快速的显示我们想要的数据. 通过上面的两个工具,我们快速的显示用户表信息.用户表结构如下: 我们创建一个用户模型MyUser.php,代码如下: <?php namespace ap

  • 修改Android Studio 的 Logcat 缓冲区大小操作

    找到 Android Studio的安装目录\bin\idea.properties 文件 将文件中的idea.cycle.buffer.size=1024 改成 例如: idea.cycle.buffer.size=102400 另一个设置方式是: 补充知识:logcat 设置缓存区 设置buff logcat 的buff 有2种分配方式,一种是在kernel的,一种是logd, MM用的是在logd的这种的 system/core/liblog/Android.mk ifneq ($(TAR

  • Android 将本地资源图片转换成Drawable,进行设置大小操作

    前言: 因为项目中显示图片是用Picasso,设置placeholder和error图片的时候发现,本地图片的大小无法满足我的需求,需要先对图片大小改变再显示. Picasso的placeholder和error的参数也只有int resId和Drawable drawable 于是打算将改变过大小的Drawable传进入显示,咦,效果很满意! 整个过程的思路: 将本地图片(R.drawable.image)变成Drawable对象 将Drawable对象转换成Bitmap对象 将Bitmap对

随机推荐