栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

计算机所理解的加法运算

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

计算机所理解的加法运算

先看这篇博客

数据在变量地址的空间表示_咕噜一口温开水的博客-CSDN博客https://blog.csdn.net/qq_47286790/article/details/122822416

一、问题引出 

在编写C的时候,我在思考int变量类型有最大值,最大值为2147483647,那么溢出会怎么样?

// 包含一个叫stdio的文件
// std-标准 standard input output
#include 
#include 

int Add(void) {
	int a = 2147483647+ 2147483647;
	return a;
}


int main() {
	printf("%dn", Add());
	return 0; //返回0
}

打印的是 -2 

二、解决问题

计算机的加法是二进制加法,

其实就是原码和补码的问题

111111111111111111111111(二进制) = 2147483647(十进制)

2147483647 + 2147483647(十进制) = 11111111111111111111111111111111 + 11111111111111111111111111111111(二进制)

逢二进一

算出来是 111111111111111111111111111111110

算出来的数是有33位,而int类型数据是32bit位有符号数,溢出的1就是消失了(这和计算机硬件的加法器相关了),最终加出来的二进制数是11111111111111111111111111111110

这个二进制数int类型有符号,也就是负号,算出来是-2

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/737990.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号