C语言 08 类型转换

一种类型的数据转换为另一种类型的数据,这种操作称为类型转换

类型转换分为自动类型转换强制类型转换

自动类型转换

比如现在希望将一个 short 类型的数据转换为 int 类型的数据:

#include <stdio.h>int main(){short s = 10;// 直接将s的值传递给i即可,但是注意此时s和i的类型不同int i = s;
}

这里其实就是一种自动类型转换,就是编译器隐式地进行的数据类型转换,这种转换不需要编写者做什么,直接写就行,会自动进行转换操作。

如果使用一个比转换的类型最大值都还要大的值进行类型转换,比如:

#include <stdio.h>int main() {int a = 511;// 最大127char b = a;printf("%d", b);
}
-1

很明显 char 类型是无法容纳大于 127 的数据的,因为只占一个字节。
而 int 占 4 个字节,如果需要进行转换,那么就只能丢掉前面的就只保留 char 所需要的那几位了,所以这里得到的就是 -1:

int = 511 -> 00000000 00000000 00000001 11111111
char -> 11111111 -> -1

也可以将整数和小数类型的数据进行互相转换:

#include <stdio.h>int main() {int a = 99;double d = a;printf("%f", d);
}
99.000000

这里需要注意的是:小数类型在转换回整数类型时,会丢失小数部分(不是四舍五入,是直接丢失小数):

#include <stdio.h>int main() {double a = 3.14;int b = a;printf("%d", b);
}
3

除了赋值操作可以进行自动类型转换之外,在运算中也会进行自动类型转换,比如:

#include <stdio.h>int main() {float a = 2;int b = 3;double c = b / a;printf("%f", c);
}
1.500000

如果参与运算的既有整数类型,又有浮点类型,结果为什么是浮点类型呢?这是由于类型转换导致的。规则如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 不同的类型优先级不同(根据长度而定)

  • char和short类型在参与运算时一律转换为int再进行运算。

  • 浮点类型默认按双精度进行计算,所以就算有 float 类型,也会转换为 double 类型参与计算。

  • 当有一个更高优先级的类型和一个低优先级的类型同时参与运算时,统一转换为高优先级运算。

    int 和 long 参与运算,那么 int 转换为 long 再算,所以结果也是 long 类型;
    int 和double 参与运算,那么先把 int 转换为 double 再算,所以结果也是 double 类型。

强制类型转换

强制类型转换可以手动去指定类型,格式如下:

(强制转换类型) 变量、常量或表达式;

比如:

#include <stdio.h>int main() {// 2.5是一个double类型的值,但是可以强制转换为int类型赋值给a,强制转换之后小数部分丢失int a = (int) 2.5;printf("%d", a);
}
2

也可以对一个算式的结果进行类型转换:

#include <stdio.h>int main() {double a = 3.14;// 注意得括起来表示对整个算式的结果进行类型转换,不然强制类型转换只对其之后紧跟着的变量生效int b = (int) (a + 2.8);printf("%d", b);
}
5

在需要得到两个 int 相除之后带小数的结果时,强制类型转换就显得很有用:

#include <stdio.h>int main() {int a = 10, b = 4;// 不进行任何的类型转换,int除以int结果仍然是int,导致小数丢失double c = a / b;// 对a进行强制类型转换,现在是double和int计算,根据上面自动类型转换规则,后面的int自动转换为double,结果也是double了,这样就是正确的结果了double d = (double) a / b;printf("不进行类型转换: %f, 进行类型转换: %f", c, d);
}

合理地使用强制类型转换,能够解决很多情况下的计算问题。

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

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

相关文章

2024洗地机名牌排行榜:细数最值得买的4大热门款

传统的清洁地面方式往往费时费力&#xff0c;容易导致腰酸背痛等不适&#xff0c;给人们带来一系列家务问题。然而&#xff0c;随着洗地机、扫地机器人、吸尘器等电动清洁工具的出现&#xff0c;清洁变得更加轻松便捷&#xff0c;受到了广大用户的欢迎。身为一名有着多年家居经…

一款基于AB32VG1的桌面智能坞小工具

项目简介&#xff1a; 我基于这个开发板制作了一款桌面小工具&#xff0c;它是一个小巧、功能丰富、具有实用价值的桌面物联网“控制中枢”。可以实现&#xff1a; 精灵播放音乐时内部有一颗呼吸灯的效果&#xff1b; 精灵可以通过OLED显示当前音乐名字、播放状态&#xff1b;…

Learn SRP 02

3.Editor Rendering 3.1Drawing Legacy Shaders 因为我们的管线只支持无光照的着色过程&#xff0c;使用其他不同的着色过程的对象是不能被渲染的&#xff0c;他们被标记为不可见。尽管这是正确的&#xff0c;但是它还是隐藏了场景中一些使用错误着色器的对象。所以让我们来渲…

IP地址的主要功能及其在网络中的重要性

在当今数字化时代&#xff0c;互联网已经成为人们生活和工作中不可或缺的一部分。而IP地址&#xff08;Internet Protocol Address&#xff09;作为互联网中的关键组成部分&#xff0c;发挥着至关重要的作用。本文将探讨IP地址的主要功能以及其在网络中的重要性。 IP地址查询&…

计算机视觉数据集——扑克识别数据集

扑克数据集 数据集地址&#xff1a;https://download.csdn.net/download/matt45m/89130302 这是一个检测扑克牌种类的数据集&#xff0c;检测种类目前只有6种&#xff0c;分别是 "queen", "ten", "nine", "king", "jack"…

短视频转gif怎么做?三十秒在线转换gif

在现在这个快节奏的时代&#xff0c;gif动画相较于长时间的视频更受大众的欢迎。当我们需要将短视频、电影等视频制作成gif动画图片的时候就可以使用gif动画图片&#xff08;https://www.gif.cn/&#xff09;制作网站-GIF中文网&#xff0c;无需下载软件&#xff0c;手机、pc均…

OSCP靶场--Fail

OSCP靶场–Fail 考点(rsync未授权覆盖公钥Fail2ban提权) 1.nmap扫描 ## ┌──(root㉿kali)-[~/Desktop] └─# nmap -sV -sC 192.168.153.126 -p- -Pn --min-rate 2500 Starting Nmap 7.92 ( https://nmap.org ) at 2024-04-12 23:34 EDT Warning: 192.168.153.126 giving …

招生管理|基于SprinBoot+vue的招生管理系统系统设计与实现(源码+数据库+文档)

招生管理目录 基于SprinBootvue的招生管理系统设计与实现 一、前言 二、系统设计 三、系统功能设计 前台 后台 教师权限 学生权限&#xff1a; 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff…

大数据------JavaWeb------JDBC(完整知识点汇总)

JDBC 定义 全称为Java数据库连接&#xff08;Java DataBase Connectivity&#xff09;&#xff1a;是使用java语句来操作所有关系型数据库的一套API JDBC本质 它是官方定义的一套操作所有关系型数据库的规则&#xff08;即接口&#xff09;&#xff0c;各个数据库厂商会去实现…

VLC-Qt实现简单的视频播放器

VLC-Qt是一个结合了Qt应用程序和libVLC的免费开源库。它提供了用于媒体播放的核心类&#xff0c;以及用于快速开发媒体播放器的GUI类。由于集成了整个libVLC&#xff0c;VLC-Qt具备了libVLC的所有特性&#xff0c; 例如&#xff1a;libVLC实例和播放器、单个文件和列表播放、音…

.NET i18n 多语言支持与国际化

环境 WIN10 VS2022 .NET8 1.&#x1f44b;创建项目 2.&#x1f440;创建Resources Controllers HomeController.en.resx HomeController.fr.resx HomeController.zh.resx 3.&#x1f331;Program.cs添加国际化支持 // 添加国际化支持 builder.Services.AddLocalization(…

6.Hexo标签插件和资产文件夹

标签插件 标签插件&#xff0c;基本上是只是一些小的代码片段&#xff0c;可以将他们添加到markdown文件中 以便添加特定的代码&#xff0c;不需要编写复杂或混乱的HTML 当很多时候想要在markdown页面添加一些特殊元素&#xff0c;通常必须使用HTML 如果不想这么用HTML&#…

CSS特效---百分比加载特效

1、演示 2、一切尽在代码中 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Document</title&…

公众号文章如何添加多个附件?

在公众号分享一些文档给粉丝下载&#xff0c;有那么几种方式。比如把文档转成超链接&#xff0c;放在公众号的“阅读原文”处&#xff0c;或者把文件转成二维码&#xff0c;贴在公众号文章里面。这两种方式其实都需要先把文件转成超链接&#xff08;网页链接&#xff09;&#…

【目标检测数据集】VOC2007 数据集介绍

一、介绍 VOC 数据是 PASCAL VOC Challenge 用到的数据集&#xff0c;官网&#xff1a;http://host.robots.ox.ac.uk/pascal/VOC/ 备注&#xff1a;VOC数据集常用的均值为&#xff1a;mean_RGB(122.67891434, 116.66876762, 104.00698793) Pytorch 上通用的数据集的归一化指…

OVITO-2.9版本

关注 M r . m a t e r i a l , \color{Violet} \rm Mr.material\ , Mr.material , 更 \color{red}{更} 更 多 \color{blue}{多} 多 精 \color{orange}{精} 精 彩 \color{green}{彩} 彩&#xff01; 主要专栏内容包括&#xff1a; †《LAMMPS小技巧》&#xff1a; ‾ \textbf…

系统架构最佳实践 -- 一般优惠券平台系统架构设计

优惠券是商城的一种基础的营销工具&#xff0c;在目前c端用户对于电子优惠券已经非常熟悉的情况下&#xff0c;一般自营商城的营销活动系统&#xff0c;都是从优惠券开始搭建。 一、名词定义 基于个人理解&#xff0c;为方便表述&#xff0c;首先对可能产生歧义的名词进行如下…

ubuntu 设置 root 用户密码,创建新用户并赋权限

ubuntu 设置 root 用户密码&#xff0c;创建新用户并赋权限 在适用于 Linux 的 Windows 子系统上运行 Linux GUI 应用&#xff0c; 安装 Ubuntu-20.04 系统&#xff0c;新安装好的系统&#xff0c;设置用户名密码时&#xff0c; root 用户密码默认为空&#xff0c;这时需要设置…

信息学奥赛一本通T1442-小木棍【dfs】

信息学奥赛一本通T1442-小木棍 - C语言网 (dotcpp.com) #include <iostream> #include <algorithm> #include <cmath> #include <cstring> using namespace std; const int N1e5100; int n; int res1e9; int a[N],p0,sd0; bool vis[N]; bool dfs(int i…

【R语言】绘制标准地图(指北针,比例尺,图例)

在绘制地图时&#xff0c;我们一般都是利用“ArcGIS”"MapGIS"等专业软件进行手动操作。这样制作的地图自定义的效果强&#xff0c;我们可以随意调换地图的各种元素&#xff0c;但是今天本文要将的是如何使用R语言绘制具备地图三要素的精美地图&#xff0c;当然代码绘…