关于整形提升

news2024/9/24 13:13:11

 个人主页:Lei宝啊 

愿所有美好如期而遇 


什么是整型提升?

在C语言的整型算数运算总是至少以int类型来进行的,当表达式中有char,byte,short类型的操作数时,他们在被使用前需要被转换成int类型,这种转换我们称之为整型提升

最后int类型的值赋值给short类型的s时会被截断,丢失一部分比特位。

为什么要整型提升?

这就涉及到CPU了,下面如果能够听懂就最好,听不懂也没关系,C语言学习阶段能够知道有整型提升和知道如何进行整型提升就已经很好了。

表达式的整型运算要在CPU相应的运算器内执行,而这个运算器的操作数的字节长度一般就是int类型的字节长度,也就是4个字节,这也是CPU通用寄存器的长度,由此,即使是两个char类型的变量相加也要先转换成CPU内整型操作数的标准长度。

就好比是一个模具,我们盛放数据的标准模具大小是4个字节,如果我们放比他小的数据进去,是不是不符合规范啊,所以我们先把他扩充到标准模具大小,再放进去就刚刚好了,大致是这么个意思。

如何进行整型提升?

整型提升是按照变量的数据类型的符号位来进行提升的:

#include <stdio.h>

int 
main()
{

	//00000001
	char c1 = 1;

	//11111111
	char c2 = -1;

	//0 0000001 --> 00000000 00000000 00000000 00000001 
	//1 1111111 --> 11111111 11111111 11111111 11111111
	char c3 = c1 + c2;
		
	return 0;
}

//额外小声哔哔两句,负数的补码可以通过正数的补码一步得出
//就是找到正数补码最右边的1,然后这个1右边不变,左边的二进制位全部取反
//举个例子

接下来我们看整形提升的例子:

#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");

	return 0;
}

会是什么结果呢?我们先进行分析:

#include <stdio.h>

int 
main()
{
	char a = 0xb6;
	short b = 0xb600;
	int c = 0xb6000000;

	//先看a十进制的大小,11 * 16 + 6 * 16 = 182 
	//同时a需要进行整型提升
	//    a : 10110110 --> 11111111 11111111 11111111 10110110
	// 0xb6 :              00000000 00000000 00000000 10110110
	if (a == 0xb6)
		printf("a");

	//先看b十进制的大小,46592
	//同时b需要进行整型提升
	//      b : 10110110 00000000 --> 11111111 11111111 10110110 00000000
	// 0xb600 :                       00000000 00000000 10110110 00000000
	if (b == 0xb600)
		printf("b");

	//int不会进行整型提升,所以就是0xb6000000
	if (c == 0xb6000000)
		printf("c");

	return 0;
}

于是我们可以得出结果,只输出c。

值得说明的是,char,byte,short类型的操作数,只要参与运算,就会发生整型提升,示例:

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

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

相关文章

归并排序例题——逆序对的数量

做道简单一点的题巩固一下 归并排序实现步骤 将整个区间 [l, r] 划分为 [l, mid] 和 [mid1, r]。 递归排序 [l, mid] 和 [mid1, r]。 将左右两个有序序列合并为一个有序序列。 题目描述 给定一个长度为 n 的整数数列&#xff0c;请计算数列中的逆序对的数量。 逆序对的定义…

linux 02 vmware的快照,文件管理

01.快照 使用快照&#xff1a; 同时的快照管理器&#xff1a; 如果想要返回快照&#xff0c;选择要选择的快照&#xff0c;跳转 02. 文件管理&#xff1a; cd 02.touch 2. mkdir 文件夹 mkdir -p 文件夹 &#xff08;创建之前没有的上级文件夹&#xff09;

HTML5+CSS3小实例:人物介绍卡片2.0

实例:人物介绍卡片2.0 技术栈:HTML+CSS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><…

【Python学习】Python学习5-条件语句

目录 【Python学习】Python学习5-条件语句 前言if语句if语句判断条件简单的语句组参考 文章所属专区 Python学习 前言 本章节主要说明Python的条件语句&#xff0c;Python条件语句是通过一条或多条语句的执行结果&#xff08;True或者False&#xff09;来决定执行的代码块。 …

支付宝扫码(Easy版)支付实现

文章目录 一 技术准备1.1 二维码技术&#xff08;java&#xff09;1.2 支付宝沙箱环境准备1.3 内网穿透 二 支付宝支付相关知识2.1 各种支付方式2.2 扫码付接入流程2.3 系统交互流程(时序图)2.4 加密逻辑 三 扫码支付实现3.1 添加maven依赖&#xff08;Easy版&#xff09;3.2 完…

SSM农产品朔源管理系统----计算机毕业设计

项目介绍 本项目分为前后台&#xff0c;分为普通用户、管理员、企业用户三种角色&#xff1b; 普通用户无需登录&#xff0c;可在前台直接进行溯源查询&#xff0c;管理员、企业用户可登录后台进行管理&#xff1b; 超级管理员角色包含以下功能&#xff1a; 登录,管理企业,设…

Nacos与Eureka

一、前言 在构建和管理微服务架构时&#xff0c;选择适当的服务注册中心至关重要。Nacos和Eureka都是微服务体系结构中常用的服务注册和发现工具。本文将探讨它们之间的区别&#xff0c;帮助开发者在选择适合其项目需求的注册中心时做出明智的决策。 二、架构和适用场景 Nacos …

重生奇迹MU游戏中勇者大陆

玩重生奇迹MU&#xff0c;我们进入游戏首先会来到勇者大陆。在看到勇者大陆市场&#xff0c;有很多交易的玩家也在这里&#xff0c;在勇者市场里面有商店。接下来介绍主要的NPC 的作用和怪物有那些&#xff1f; 勇者大陆卖药的商店老板莉雅 商店里面会有卖治疗药水&#xff0…

API集群负载统计 - 华为OD统一考试

OD统一考试 分值: 100分 题解: Java / Python / C++ 题目描述 某个产品的RESTful API集合部署在服务器集群的多个节点上,近期对客户端访问日志进行了采集,需要统计各个API的访问频次,根据热点信息在服务器节点之间做负载均衡,现在需要实现热点信息统计查询功能。 RESTf…

Python 操作 JMeter 探索:pymeter 实操指南

概要 JMeter 是一个流行的性能测试工具&#xff0c;用于测试 Web 应用程序的性能和负载。它通常与 GUI 一起使用&#xff0c;但如果您想在自动化测试中集成 JMeter&#xff0c;或者以编程方式创建和运行测试计划&#xff0c;那么 pymeter 库将是一个强大的工具。本文将介绍如何…

Camtasia2024苹果Mac电脑版(屏幕录制剪辑软件)

Camtasia Mac2024免费版是一款由TechSmith公司官方进行汉化推出的最新版本&#xff0c;借助Camtasia&#xff0c;您可以轻松记录屏幕并创建优美&#xff0c;专业的视频。记录所有内容-您的整个屏幕或只是一个窗口。或者&#xff0c;添加您已经拥有的视频&#xff0c;图像&#…

Spring Boot应用启动时自动执行代码的五种方式

Spring Boot为开发者提供了多种方式在应用启动时执行自定义代码&#xff0c;这些方式包括注解、接口实现和事件监听器。在本篇博客中&#xff0c;我们将探讨一些常见的方法&#xff0c;以及如何利用它们在应用启动时执行初始化逻辑。 1. PostConstruct注解 PostConstruct注解…

下载的 MongoDB bin目录下没有mongo.exe文件问题解决

MongoDB 4.4版本之前&#xff0c;我们可以在MongoDB的安装目录的bin文件夹中找到mongo.exe这个命令行工具。但是从MongoDB 4.4版本开始&#xff0c;MongoDB官方已经不再提供独立的mongo.exe可执行文件&#xff0c;而是将其整合到了mongosh这个新的交互式Shell中。 我们可以访问…

轻松识别几个小时的长音视频文件

前言 之前的文章绍一个准确率非常高的语音识别框架&#xff0c;但那个只能识别实时的短音频&#xff0c;如果想要识别一个非常长的音频&#xff0c;几十分钟&#xff0c;甚至几个小时&#xff0c;那之前的那个是做不到的所以就有了本文。本文介绍搭建一个长语音识别服务&#…

我的512天创作者纪念日,记录数字的不平凡

文章目录 512天创作者纪念日&#xff1a;2023年的12月31日CSDN的512天消息提醒第一篇文章&#xff0c;最后一篇文章总计847篇文章&#xff0c;每月发文分布512天&#xff0c;各专栏文章统计512天&#xff0c;互动总成绩 512天创作者纪念日&#xff1a;2023年的12月31日 2023年…

数据结构期中模拟

一、填空题 1.二叉树就是度为 2 的树。&#xff08;F&#xff09; 二叉树的度<2 2.线性表采用链式存储表示时&#xff0c;所有结点之间的存储单元地址可以连续也可以不连续。(T) 在顺序表中&#xff0c;逻辑上相邻的元素&#xff0c;其物理位置一定相邻。在单链表中&#x…

java数据结构与算法刷题-----LeetCode62. 不同路径

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 很多人觉得动态规划很难&#xff0c;但它就是固定套路而已。其实动态规划只…

算法第十三天-解码方法

解码方法 题目要求 解题思路 来自【宫水三叶】 基本分析 我们称一个解码内容为一个item。 根据题意&#xff0c;每个item可以由一个数字组成&#xff0c;也可以由两个数字组成。 数据范围为100&#xff0c;很具有迷惑性&#xff0c;可能会有不少同学会想使用DFS进行暴力搜索…

性能优化-OpenMP基础教程(二)

本文主要介绍OpenMP并行编程技术&#xff0c;编程模型、指令和函数的介绍、以及OpenMP实战的几个例子。希望给OpenMP并行编程者提供指导。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#xff08;HPC&am…