首页 > 其他分享 >将一个超出范围的值赋给整形(int)

将一个超出范围的值赋给整形(int)

时间:2023-01-29 18:23:37浏览次数:39  
标签:超出范围 int long 2147483647 printf sizeof 整形 231

将一个超出范围的值赋给整形会发生什么?

一、假设该超出范围的值是a(a>0),则将a用2进制表示,之后将a对数据类型的模数取模(int为32位,模数为232。小数模数为2),设运算结果为b(b是一个二进制数)。

最后将2进制的b转换为10进制即可。

 

二、可理解为下图的循环:

例:

  1. 输入231+1,则数字显示为-(231-1),即-2147483647。
  2. 输入-5,则数字显示为-5

含义:

  1. 可理解为该数从0开始,向“加”方向走了231+1步。也可理解为该数从231-1开始,向“加”方向走了2步,第一步走到-231,第二步走到-(231-1)。
  2. 该数从0开始,向“减”方向走了5步,最后位于“-5”位置。

试验

int为32为整型,数据范围为

-231 ~ 231-1即-2147483648~2147483647

试验程序:

/*
试验int是如何溢出的
*/
#include <stdio.h>
int main()
{
	printf("先看看各整型的字节数\n");
	printf("sizeof(char)=%lld\n", sizeof(char));
	printf("sizeof(short)=%lld\n", sizeof(short));
	printf("sizeof(int)=%lld\n", sizeof(int));
	printf("sizeof(long)=%lld\n", sizeof(long));
	printf("sizeof(long long)=%lld\n", sizeof(long long));
	printf("得知int类型为4个字节,取值范围为-2147483648~2147483647\n\n");
	int a[10]={};
	a[0] = -2147483649;
	a[1] = 2147483647+1;
	a[2] = 2147483647+1+2147483647;
	a[3] = 2147483647+1+2147483647+1;
	a[4] = 2147483647+1+2147483647+1+2;
	for(int i=0;i<5;i++)
	{//输出结果
		printf("(dec)a[%d]=%d\n",i, a[i]);
		printf("(hex)a[%d]=%x\n",i, a[i]);
	}
	return 0;
}

运行结果:

先看看各整型的字节数
sizeof(char)=1
sizeof(short)=2
sizeof(int)=4
sizeof(long)=4
sizeof(long long)=8
得知int类型为4个字节,取值范围为-2147483648~2147483647

(dec)a[0]=2147483647
(hex)a[0]=7fffffff
(dec)a[1]=-2147483648
(hex)a[1]=80000000
(dec)a[2]=-1
(hex)a[2]=ffffffff
(dec)a[3]=0
(hex)a[3]=0
(dec)a[4]=2
(hex)a[4]=2

 

标签:超出范围,int,long,2147483647,printf,sizeof,整形,231
From: https://www.cnblogs.com/FishSmallWorld/p/17073407.html

相关文章

  • 二. Intellij IDEA 巅峰操作- IDEA 配置
    配置1.界面优化原则:界面元素越小,界面利用效率越高不同的色彩在视觉上更容易体现不同元素的差异基于以上两点,可以通过相关插件以及IDEA本身的配置来对界面进......
  • 一. Intellij IDEA 巅峰操作-引言
    引言为什么标题叫"巅峰操作"?为了致敬小饭的《巅峰之智》系列笔者在指导或者观察其他开发人员进行开发的过程中发现,很多开发人员的对于IDEA的使用效率较低,出现的......
  • 关于pacemaker中资源启动的位置约束Location Constraints
    默认情况,对于业务应用的资源启动在那里,可能是随机的、有时启动在app01上,也可能启动在app02了我们也可以通过手动配置分数的方式,将某个节点的分数配置到极高,无穷大,这样,资......
  • .eslintrc.json
    "extends":["eslint:recommended","plugin:react/recommended","plugin:@typescript-eslint/recommended"],"rules":{"import/no-extraneous-dependencies......
  • stylelint.config.js
    module.exports={extends:['stylelint-config-standard-scss'],plugins:['stylelint-scss'],rules:{indentation:[2],'max-empty-lines':1,......
  • 使用Hiprint实现简单单面打印功能
    打印插件很多,但是好用的不是很多,之前项目中经常使用的是lodop打印插件,但是遇见新版本的谷歌浏览器后就经常出现卡死现象,为此想把项目中常用的单页打印模块用其他插件替换,之......
  • 对于vector容器中,存储的是int类型,但若不开long long 就ER
    牛客暑期训练1Fdfs鸡玩炸弹人#include<iostream>#include<vector>usingnamespacestd;typedeflonglongll;//计算有炸弹的连通块的数量。在一个连通块内不论......
  • vite设置eslint
    vite设置eslint设置vue的基础规则,有一系列的集合设置vue关于ts的一些高级规则vite的plugin插件安装://viteeslint的插件"@vitejs/plugin-vue":"^4.0.......
  • 7.17 SQL Server INTERSECT(交集)
    SQLServerINTERSECT(交集)目录SQLServerINTERSECT(交集)简介示例简介SQLServerINTERSECT组合了两个或多个查询的结果,并返回多个查询相同的行。语法:query_1INTERSEC......
  • Python 内置界面开发框架 Tkinter入门篇 乙
    *以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「englyf」https://mp.weixin.qq.com/s/2GFLTstDC7w6u3fTJxflNA本文大概 1685 个字,阅读需花 6 分钟......