原来C语言计算的数只要低过4个字节就要整型提升!

news2024/12/28 18:28:54

C的整型算术运算总是至少以缺省整型类型的精度来进行的。为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换被称为整型提升。

比如:

        char a = 3;

        char b = 127;

        char c = a + b;

        printf("%d", c);

这个时候C的值是多少呢?你可能会想a=3,b=127,相加就是130,如果这么想就错了,计算机的计算可没有这么简单。先说一下计算结果c=-126.是不是感觉有些不可思议呢?下面就来剖析一下计算机的计算过程。

c=a+b,证明a和b都要参加运算的,由于a和b是char型只有一个字节,不足4个字节,所以要提升

a的存储是:0000 0011  这就是a在内存中存储的形式

b的存储是:0111 1111  这就是b在内存中存储的形式

a和b只有一个字节,还是有符号型的类型,所以提升的结果就是:

0000 0000 0000 0000 0000 0000 0000 0011  a整型提升

0000 0000 0000 0000 0000 0000 0111 1111  b整型提升

提升后就都是4个字节了,现在就可以计算a+b了,两个32位的二进制数相加的结果就是:

0000 0000 0000 0000 0000 0000 1000 0010  a和b相加的结果

这会要把结果存放到c中,发现c是char型的,只能存放1个字节,现在就要截断了。截断成1个字节

1000 0010  结果给c时发现是char型  要截断就变成了 1000 0010了

最后要打印整型的c,又需要cpu来计算,由于c是一个字节的char型,所以还要整型提升,

1000 0010     的整型提升就是补全符号位,结果为:

1111 1111 1111 1111 1111 1111 1000 0010     现在是c的补码    要  求c的反码(这个数减1)结果:

1111 1111 1111 1111 1111 1111 1000 0001  现在是c的反码 再求c的原码,除符号位取反,结果:

1000 0000 0000 0000 0000 0000 0111 1110 现在是c的原码,此时首位为1,证明是负数,后面的111 1110     的 十进制值是126,  加上负数  正好c的值就变成了 -126.

这就是这个简单的加法运算在计算机中的运算过程,看着简单,实则很麻烦的。

为了验证这个cpu运算是要把不足4字节的数都要整型提升列举了下面这个列子:

#include"stdio.h"

int main()
{

	char a = 0xb6;
	short b = 0xb600;
	int c = 0xb6000000;
	if (a == 0xb6)
		printf("a");
	if (b == 0xb600)
		printf("b");
	if (c == 0xb6000000)
		printf("c");  // 结果只打印了c
	return 0;
}

结果只打印了c,证明a和b都被提升了,和原来的值不相等了。

咱么在通过下面的列子来辅证一下这个整型提升的结论:

int main()
{
	char a = 1;
	printf("%u\n", sizeof(a));   // 1   %u打印一个无符号数。
	printf("%u\n", sizeof(+a));  // 4
	printf("%u\n", sizeof(-a));  // 4
	return 0;
}

上面的代码,第一个打印a的字节数是1,char类型就是1个字节没有错,

后面的+a和-a都是有运算符的,需要a参加运算,所以a就要整型提升了,结果打印的值就是4了。证明提升到了4个字节。

 

 好了,今天上午的学习到此结束!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/652327.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue中如何进行地图轨迹展示与追踪?

Vue中如何进行地图轨迹展示与追踪? 随着移动互联网技术的快速发展,位置数据的应用越来越广泛。在许多应用程序中,地图轨迹展示和追踪功能已经成为了基本功能之一。在Vue中,我们可以使用许多不同的地图API和库来实现这些功能。本文…

ATTCK v13版本战术介绍——凭证访问(三)

一、引言 在前几期文章中我们介绍了ATT&CK中侦察、资源开发、初始访问、执行、持久化、提权、防御规避战术,本期我们为大家介绍ATT&CK 14项战术中凭证访问战术第13-17种子技术,后续会介绍凭证访问其他子技术,敬请关注。 二、ATT&…

智能图像处理竟然能做出这种神奇的事

前言 大家都知道,搞论文的时候很多的时候都需要数据来做支撑,对应的我就需要在很多期刊中获取对应的Figure,但是获取很麻烦,就算拍摄出来,放在论文里面效果也不是很好,而且歪七扭八的很碍眼。在这种事情上就…

5.3图的综合应用算法(最小生成树、最短路径生成)

一.最小生成树算法 1.概念(Minimum-Spanning-Tree)MST 生成树:针对于连通图,包含全部顶点,去掉一条边后不连通,加一条边形成环 最小生成树:带权连通无向图,边的权值之和最小的生成树(MST) 2.…

关于前端跨域的结局方案

前言 跨域产生的原因 浏览期的安全策略。常见的解决跨域的方法&#xff1a; 1.JONSP 利用<script>标签的src可以发起跨域请求,大致过程&#xff1a;前端的方法名传到地址上callbackxx 缺点&#xff1a;只能get方法2.domain.iframe、domain.hash、domain.parent等 上述这…

VUE项目无法启动NODE版本与NODE-SASS、SASS-LOADER版本不兼容

系列文章目录 文章目录 系列文章目录错误分析一、版本比对二、解决方案总结 错误分析 在VUE项目开发中&#xff0c;我们经常会遇到报错&#xff1a; Node Sass version 7.0.1 is incompatible with ^4.0.0。 网上解决方案也千奇百怪&#xff0c;最终操作下来&#xff0c;也是…

首添机密计算创新成果!龙蜥首获 ACM SIGSOFT 杰出论文奖

近日&#xff0c;软件工程领域的全球旗舰级会议-软件工程大会 ICSE 在澳大利亚墨尔本市召开&#xff0c;龙蜥社区云原生机密计算 SIG 核心成员&#xff08;阿里云JVM 团队&#xff09;在 Java 机密计算方面的研究成果入选了 ICSE2023&#xff0c;并且以该会议今年唯一的 All Fi…

STM32F407之SD卡读数据介绍

1&#xff0c;SD卡基础知识 SD卡&#xff08;Secure Digital Memory Card&#xff09;即&#xff1a;安全数字存储卡&#xff0c;它是在MMC的基础上发展而来&#xff0c;作为存储器件广泛应用于电子产品中。 1.1 SD卡有SDIO和SPI两种传输方式&#xff0c;具体信号定义如下&…

DSSAT模型: 遥感数据与作物生长模型同化及在作物长势监测与估产中的应用

查看原文>>>遥感数据与作物生长模型同化及在作物长势监测与估产中的应用 基于过程的作物生长模拟模型DSSAT是现代农业系统研究的有力工具&#xff0c;可以定量描述作物生长发育和产量形成过程及其与气候因子、土壤环境、品种类型和技术措施之间的关系&#xff0c;为不…

华为开源自研AI框架昇思MindSpore应用案例:SSD目标检测

目录 一、环境准备1.进入ModelArts官网2.使用CodeLab体验Notebook实例 SSD&#xff0c;全称Single Shot MultiBox Detector&#xff0c;是Wei Liu在ECCV 2016上提出的一种目标检测算法。使用Nvidia Titan X在VOC 2007测试集上&#xff0c;SSD对于输入尺寸300x300的网络&#xf…

基于html+css的图展示130

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

正交标注有利于无监督医学图像分割

文章目录 Orthogonal Annotation Benefits Barely-supervised Medical Image Segmentation摘要本文方法Registration ModuleLabel MixingDense-Sparse Co-Training 实验结果 Orthogonal Annotation Benefits Barely-supervised Medical Image Segmentation 摘要 半监督学习的…

【DRAM存储器二】Sense Amplifier

&#x1f449;个人主页&#xff1a;highman110 &#x1f449;作者简介&#xff1a;一名硬件工程师&#xff0c;持续学习&#xff0c;不断记录&#xff0c;保持思考&#xff0c;输出干货内容 参考书籍&#xff1a;《Memory Systems - Cache, DRAM, Disk》 目录 前言 感应…

【数据管理架构】什么是 OLAP?

作为数据仓库实施的核心组件&#xff0c;OLAP 为商业智能 (BI) 和决策支持应用程序提供快速、灵活的多维数据分析。 什么是 OLAP&#xff1f; OLAP&#xff08;用于在线分析处理&#xff09;是一种软件&#xff0c;用于对来自数据仓库、数据集市或其他一些统一的集中式数据存储…

Sentieon | 每周文献-Population Sequencing-第一期

群体基因组系列文章-1 标题&#xff08;英文&#xff09;&#xff1a;The Impact of ACEs on BMI: An Investigation of the Genotype-Environment Effects of BMI 标题&#xff08;中文&#xff09;&#xff1a;ACEs对BMI的影响&#xff1a;探究BMI的基因型-环境效应 发表期刊…

【栈与队列part01】| 232.用栈实现队列、225.用队列实现栈

目录 ✿LeetCode232.用栈实现队列❀ ✿LeetCode225. 用队列实现栈❀ ✿LeetCode232.用栈实现队列❀ 链接&#xff1a;232.用栈实现队列 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a;…

为什么要使用卷积

1. 卷积这个名词是怎么解释&#xff1f;“卷”是什么意思&#xff1f;“积”又是什么意思&#xff1f; 卷积的“卷”&#xff0c;指的的函数的翻转&#xff0c;从 g(t) 变成 g(-t) 的这个过程&#xff1b;同时&#xff0c;“卷”还有滑动的意味在里面&#xff08;吸取了网友李…

【Vue全家桶高仿小米商城】——(一)Node环境配置

文章目录 第一章&#xff1a;课程简介一、Win/Mac Node环境安装二、Linux Node环境安装三、安装淘宝镜像四、安装vue/vue-cli/webpack/webpack-cli五、Node版本如何做卸载和升级&#xff08;Mac/Linux&#xff09; 第一章&#xff1a;课程简介 对课程的整体内容做介绍&#xf…

系统编程(4):进程间通信

文章目录 管道通信无名管道有名管道 管道通信 无名管道 无名管道只能在有亲缘关系之间的进程间通信&#xff08;比如父子进程&#xff09;。 第一步是创建一个管道&#xff0c;这个管道有两个文件描述符一个读&#xff0c;一个写 - 两个文件描述符fd[2]&#xff0c;一个文件…

智慧城市同城V4小程序V2.27独立开源版 + 小程序+全插件+VUE小程序开源前端 安装测试教程

智慧城市同城V4小程序V2.27开源独立版本月最新版&#xff0c;与上一版相比修复了一些小细节&#xff0c;功能本身并无大的变化。体验下来感觉唯一区别用户授权一键就登陆了&#xff0c;上两版都需要选择头像呢称。新版系统包含全插件、包括很多稀缺收费的插件都在里面如括招聘、…