C语言中的类型转换

news2024/11/25 13:10:24

C语言中的类型转换

隐式类型转换

整型提升

概念:

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

如何进行整型提升

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

  • 注:如果对二进制,原码,反码,补码还不是特别了解,建议先看看二进制,原码,反码,补码

  • 举个例子:

    #include<stdio.h>
    int main()
    {
    	char num_1 = 5;
    	/*
    		数字5是一个整型数据,在内存中的存储形式为:
    		0000 0000 0000 0000 0000 0000 0000 0101
    		由于要存入char型变量中,而char只有一个字节,因此要进行截断
    		num_1 = 0000 0101
    	*/
    	char num_2 = 127;
    	/*
    		数字127是一个整型数据,在内存中的存储形式为:
    		0000 0000 0000 0000 0000 0000 0111 1111
    		由于要存入char型变量中,而char只有一个字节,因此要进行截断
    		num_1 = 0111 1111
    	*/
    	char num_3 = num_1 + num_2;
    	/*
    		由于整型提升,字符型数据num_1, num_2在使用之前要提升为int型(高位补符号位0)
    		num_1 = 0000 0000 0000 0000 0000 0000 0000 0101
    		num_2 = 0000 0000 0000 0000 0000 0000 0111 1111
    		num_3 = 0000 0000 0000 0000 0000 0000 1000 0100
    		进行整形阶段
    		num_3 = 1000 0100 
    	*/
    	printf("num_3 = %d\n", num_3);
    	/*
    		%d是以十进制的形式打印有符号整数
    		char num_3 = 1000 0100,符号位为1
    		整型提升:  1111 1111 1111 1111 1111 1111 1000 0100
    		补码转反码:1111 1111 1111 1111 1111 1111 1000 0011
    		反码转原码:1000 0000 0000 0000 0000 0000 0111 1100 -> -124
    	*/
    	return 0;
    }
    
  • 下面两个例子也能说明整型提升的存在:

    Eg1:
    #include<stdio.h>
    int main()
    {
    	char num_1 = 0xb6;
    	short num_2 = 0xb600;
    	int num_3 = 0xb6000000;
    
    	if (0xb6 == num_1)
    		printf("num_1\n");
    	/*
    		num_1 = 1011 0110
    		整型提升:1111 1111 1111 1111 1111 1111 1011 0110
    		明显,与0xb6不相等
    	*/
    	if (0xb600 == num_2)
    		printf("num_2\n");
    	/*
    		num_2 = 1011 0110 0000 0000
    		整型提升:1111 1111 1111 1111 1011 0110 0000 0000
    		可见,与0xb600不相等
    	*/
    	if (0xb6000000 == num_3)
    		printf("num_3\n");
    	/*
    		num_3就是int型,不要整型提升,因此num_3即为0xb6000000
    	*/
    
    	return 0;
    }
    

Eg2:
#include<stdio.h>
int main()
{
	char num = 1;

	printf("sizeof(num) = %u\n", sizeof(num));

	printf("sizeof(+num) = %u\n", sizeof(+num));
	printf("sizeof(-num) = %u\n", sizeof(-num));
    //%u是以十进制的形式打印无符号整数,由于操作符sizeof的值一定是整数,因此用%u打印
	/*
		由于num参与了运算,因此要整型提升为int型	
	*/
	return 0;
}

算术转换

  • 如果某个操作符的各个操作数属于不同的类型,那么除非其中的一个操作数的转换为另一个操作数的类型,否则操作就无法进行。下面的层次体系称为寻常算术转换

    long double
    double
    float
    unsigned long int
    long int
    unsigned int
    int
    //向上转换    
        
    /*
        没有char和short类型,是因为在使用时char和short要先整型提升为int
    */
    
  • 例如执行程序:

    int num_1 = 5;
    float num_2 = 3.14;
    float num_3 = num_1 + num_2;
    
  • num_1和num_2相加时,int要先转换为float类型,再和num_2相加

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

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

相关文章

MySQL | JDBC连接数据库详细教程【全程干货】

文章目录 一、什么是JDBC&#xff1f;二、JDBC工作原理三、使用JDBC连接MySQL数据库【✔】1、安装对应数据驱动包2、将jar包导入项目中3、编写代码连接数据库【⭐】1️⃣ 创建数据源2️⃣ 和数据库建立网络连接3️⃣ 构造SQL语句4️⃣ 执行SQL语句5️⃣ 断开连接&#xff0c;释…

【AI提示】ChatGPT提示工程课程(吴恩达OpenAI)推理文本(中文chatgpt版)

设置 Setup产品评论文本情感&#xff08;正面/负面&#xff09;Sentiment (positive/negative)识别情绪类型从客户评论中提取产品和公司名称一次完成多项任务Inferring topics 推断主题为某些主题制作新闻提醒 Inferring 推理 在本课中&#xff0c;您将从产品评论和新闻文章中推…

计算机专业主要学习什么

2020计算机专业主要学习什么 1计算机专业都学习哪些方面的知识 1、可视化编程 掌握编程方法和可视化技术&#xff0c;熟悉一个可视化平台及其软件开发技术。能够获取Delphi编程人员系列&#xff0c;Java Basic或VB开发专家认证。 就业方向&#xff1a;企业&#xff0c;政府&…

Elasticsearch:验证 Elasticsearch Docker 镜像并安装 Elasticsearch

Elasticsearch 可以作为 Docker 镜像使用。 www.docker.elastic.co 上提供了所有已发布的 Docker 图像和标签的列表。 源文件在 Github 中。此软件包包含免费和订阅功能。 开始 30 天试用以试用所有功能。 从 Elasticsearch 8.0 开始&#xff0c;默认启用安全性。 启用安全性后…

为什么很多企业把35岁视为分水岭

(点击即可收听) 为什么很多企业把35岁视为分水岭 有时候,别人的故事,若干年后,就是自己的故事,只要身在互联网这个行业里,可以说,每个人都避免不了35岁危机 不要五十步笑百步 前阵子,朋友圈一位行业知名大佬,35岁,每天兢兢业业,任劳任怨,本以为安稳渡过3个月试用期,正快要转正时…

AutoEncoder GAN

AE Auto-Encoder (AE) 是20世纪80年代晚期提出的&#xff0c;它是一种无监督学习算法&#xff0c;使用了反向传播算法&#xff0c;让目标值等于输入值。 是神经网络的一种&#xff0c;经过训练后能尝试将输入复制到输出。三层网络结构&#xff1a;输入- 隐层- 输出自编码网络…

一道经典的网红面试题:从URL输入到页面展现到底发生了什么?

目录 &#x1f3ee; 前言 一、URL 到底是啥 二、域名解析&#xff08;DNS&#xff09; 三、TCP 三次握手 四、发送 HTTP 请求 五、服务器处理请求并返回 HTTP 报文 六、浏览器解析渲染页面 1.根据 HTML 解析 DOM 树 2.根据 CSS 解析生成 CSS 规则树 3.结合 DOM 树和…

MySQL高级篇复盘笔记(一)【存储引擎、索引、SQL优化、视图、触发器、MySQL管理】

❤ 作者主页&#xff1a;欢迎来到我的技术博客&#x1f60e; ❀ 个人介绍&#xff1a;大家好&#xff0c;本人热衷于Java后端开发&#xff0c;欢迎来交流学习哦&#xff01;(&#xffe3;▽&#xffe3;)~* &#x1f34a; 如果文章对您有帮助&#xff0c;记得关注、点赞、收藏、…

解决“Adobe Premiere安装后无法启动“问题

昨天在Win10 专业版上安装Adobe Premiere2019(后面简称 Adobe Pr2019)时&#xff0c;发现Pr2019安装之后无法启动&#xff0c;有时&#xff0c;桌面上有时会产生空白的Premiere图标。换了好几个Adobe Premirere安装包&#xff0c;都是如此。正在苦思冥想中&#xff0c;突然灵机…

YOLOv5独家原创改进,ShuffleNetV2网络结构,改进ShuffleNetV2准确率低问题

目录 一、介绍1、轻量化目标检测的瓶颈2、YOLOv5和ShuffleNetV2的概述 二、ShuffleNetV2的架构1、ShuffleNetV2的基本单元——ShuffleNet Unit2、ShuffleNetV2的网络结构 三、ShuffleNetV2的特点1、高效的通道重排操作2、逐通道矩阵乘法3、轻量级和高精度的平衡 四、YOLOv51、Y…

【2023 AI 写作工具大盘点】国内外 45 款免费 AI 写作神器汇总,轻松成为创作高手!

0. 未来百科 未来百科(https://nav.6aiq.com)&#xff0c;是一个知名的AI产品导航网站 —— 为发现全球优质AI工具而生 。目前已 聚集全球3000优质AI工具产品 &#xff0c;旨在帮助用户发现全球最好的AI工具&#xff0c;同时为研发AI垂直应用的创业公司提供展示窗口&#xff0c…

蓝海项目拼多多海外版Temu让外国人也体验砍一刀,普通人的机会

拼多多海外版Temu是一款专为全球华人打造的购物平台,它的出现为海外华人提供了更加便捷、实惠的购物体验。Temu的诞生,不仅是拼多多在海外市场的一次尝试,更是对全球华人消费需求的一次深入了解和满足。 一、Temu的背景 拼多多是中国最大的社交电商平台之一,它的出现改…

SaaS CRM系统的优势,与本地部署相比哪个更方便?

CRM系统主要有两种部署方式&#xff0c;分别是云部署和本地部署。那么&#xff0c;本地部署CRM软件真的比SaaS CRM好吗&#xff1f;本文将为您分析两种部署方式的区别&#xff0c;来为您答疑解惑。 云部署CRM的含义&#xff1a; 云部署CRM系统是指将CRM系统部署在云端&#x…

vue字符串拼接的多种方法

在 vue项目中&#xff0c;我们可以使用多个不同的方法来拼接字符串。今天我们就来介绍一下 vue中各种方法的用法。 第一种方法&#xff1a;使用 lodash进行字符串拼接&#xff0c;这是最简单的一个方法&#xff0c;它最大的缺点就是它比较慢&#xff0c;需要时间去执行拼接&…

解密高并发场景下的集合类问题,让程序更高效稳定!

大家好&#xff0c;我是小米&#xff0c;一个热爱技术分享的小伙伴。在日常开发中&#xff0c;我们经常会使用集合类来处理数据&#xff0c;但在高并发场景下&#xff0c;集合类可能会遇到一些线程安全的问题。今天&#xff0c;我们就来探讨一下集合类在高并发中是如何解决问题…

(转载)基于遗传算法的多目标优化算法(matlab实现)

1 理论基础 1.1 多目标优化及Pareto最优解 多目标优化问题可以描述如下&#xff1a; 其中&#xff0c;f(x)为待优化的目标函数&#xff1b;x为待优化的变量&#xff1b;Ib和ub分别为变量x的下限和上限约束&#xff1b;Aeq*xbeq为变量x的线性等式约束&#xff1b;A*x≤b为变…

Web基础 ( 六 ) AJAX

4.6.AJAX 4.6.1.什么是ajax Ajax&#xff08;Asynchronous JavaScript and XML , Asynchronous 异步的&#xff09;指的是一种使用 JavaScript、XML 和 HTTP 请求进行前端数据异步交互的技术。Ajax 不需要刷新整个页面就可以更新其中的一部分&#xff0c;使得网页的反应更快、…

RabbitMQ学习-延迟队列

延迟队列 背&#xff1a;也就是给队列设置个过期时间&#xff0c;然后到时间消息变成死信&#xff0c;消费死信队列中的消息就行&#xff0c;再没什么玩意&#xff0c;演示队列优化就是不给队列这只TTL&#xff0c;再生产者代码中消息里面设置消息TTL&#xff0c;因为 RabbitM…

ElasticSearch——Docker安装ElasticSearch和Kibana

Docker安装ElasticSearch 说明&#xff1a;由于是用docker安装&#xff0c;所以要确保已安装docker并docker环境可用。 docker安装步骤&#xff1a;https://wanli.blog.csdn.net/article/details/121445768 1、Docker安装ElasticSearch 获取指定版本的ES镜像 拉取镜像&#…

Ubuntu安装RabbitMQ server - 在ubuntu+cpolar+rabbitMQ环境下,实现mq服务端远程访问

文章目录 前言1.安装erlang 语言2.安装rabbitMQ3. 内网穿透3.1 安装cpolar内网穿透(支持一键自动安装脚本)3.2 创建HTTP隧道 4. 公网远程连接5.固定公网TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 转载自cpolar内网穿透的文章&#xff1a;无公网IP&…