C语言.不同数据类型之间相互赋值_强制类型转换_非强制类型转换

不同数据类型之间相互赋值

这个问题是 C/c++的,Java 等其他语言会报错,这里不会报错

image.png
int i=2147483647;时,可以正常输出。
image.png
int i=2147483648;时会变成-2147483648。

在大多数现代计算机系统中,整数通常采用补码表示法。这意味着正数的补码是其本身,而负数的补码是其绝对值的二进制表示取反后加1。
当你定义一个32位整数 int i 并赋值为 2147483648(这是 2^31),实际上发生的是溢出。这意味着数值超出了32位整数的表示范围。在补码表示法中,最大的正值是 2147483647(即 2^31 - 1),因此当你尝试存储 2147483648 时,系统将其视为溢出,并将最高位(符号位)设置为1,从而得到 -2147483648。

image.pngimage.png

类型转换

C语言中的类型转换主要分为强制类型转换(也称为显式类型转换)和非强制类型转换(也称为隐式类型转换)。在C语言中,强制类型转换的格式是:(type_name) expression,非强制类型转换则不需要使用特定的语法。
下面将全面、深入、详细讲解C语言中各种数据类型之间的强制类型转换和非强制类型转换,以及相关的代码示例和讲解。

非强制类型转换(隐式类型转换)

非强制类型转换是指编译器自动进行的类型转换,不需要程序员显式指定。非强制类型转换通常发生在赋值操作、函数参数传递和算术运算等场合。

1. 自动类型提升

在算术运算中,如果操作数的类型不同,编译器会自动将它们提升为更高一级的类型,以便进行运算。例如:

int a = 5;
float b = 3.14;
float c = a + b; // 这里自动将int类型的a提升为float类型,然后进行加法运算

在这个例子中,编译器将整型变量a提升为浮点型变量,以便与浮点型变量b进行加法运算。

2. 赋值操作的自动类型转换

在赋值操作中,如果赋值符号左边的变量类型与右边的表达式类型不匹配,编译器会自动将右边的表达式转换为左边的变量类型。例如:

int a = 5;
float b = 3.14;
a = b; // 这里自动将float类型的b转换为int类型,然后赋值给a

在这个例子中,编译器将浮点型变量b转换为整型变量,以便将其赋值给整型变量a

强制类型转换(显式类型转换)

强制类型转换是指程序员显式指定变量类型的转换方式。强制类型转换的格式是:(type_name) expression。通过使用强制类型转换,程序员可以明确地将一个变量的值转换为另一种数据类型。

1. 强制类型转换为整型

要将一个浮点数转换为整型,可以使用强制类型转换。例如:

float a = 3.14;
int b = (int) a; // 这里显式地将float类型的a转换为int类型,并将结果赋值给b

在这个例子中,我们将浮点型变量a转换为整型变量b。注意,在强制类型转换时,小数部分将被截断。

2. 强制类型转换为浮点型

要将一个整型转换为浮点型,也可以使用强制类型转换。例如:

int a = 5;
float b = (float) a; // 这里显式地将int类型的a转换为float类型,并将结果赋值给b

在这个例子中,我们将整型变量a转换为浮点型变量b。注意,在强制类型转换时,整型变量的值将被转换为浮点数。

注意事项和示例总:

  • 非强制类型转换由编译器自动完成,无需程序员干预。在算术运算和赋值操作中,编译器会自动将操作数或表达式的类型提升或转换为目标类型的合适表示。示例代码展示了自动类型提升和赋值操作的自动类型转换。
  • 强制类型转换使用显式语法 (type_name) expression 来指定目标数据类型。示例代码展示了如何使用强制类型转换将浮点数转换为整型以及将整型转换为浮点数。请注意,在强制类型转换时可能发生精度损失或溢出等问题,需要谨慎处理。

最后

在C语言中,数据类型从低到高的级别为:

  1. byte
  2. short
  3. int
  4. long
  5. float
  6. double

以上就是C语言中所有数据类型从低到高的级别。值得注意的是,这个顺序在不同的操作系统和编译器中可能会有所不同,因此在实际编程中,需要特别注意可能存在的兼容性问题。


C语言中数据类型的级别高低是由它们在内存中所占用的空间和它们能够表示的数值范围来决定的。级别高的数据类型可以表示更大的数值范围,并且通常占用更多的内存空间。

  1. byte: byte是最低级别的数据类型,它通常用于表示一个字节的内存单元。byte类型的大小是固定的,一般为8位,可以表示的数值范围是0到255。
  2. short: short类型通常用于表示一个16位的整数。它的数值范围是-32768到32767。short类型的大小在不同的编译器和操作系统中可能会有所不同,但通常是16位。
  3. int: int类型通常用于表示一个32位的整数。它的数值范围是-2147483648到2147483647。int类型的大小在不同的编译器和操作系统中可能会有所不同,但通常是32位。
  4. long: long类型通常用于表示一个64位的整数。它的数值范围是-9223372036854775808到9223372036854775807。long类型的大小在不同的编译器和操作系统中可能会有所不同,但通常是64位。
  5. float: float类型用于表示单精度浮点数,它占用4个字节(32位)的内存空间。它可以表示的数值范围大约是±1.5 x 10^-45 到 ±3.4 x 10^38。
  6. double: double类型用于表示双精度浮点数,它占用8个字节(64位)的内存空间。它可以表示的数值范围大约是±2.2 x 10^-308 到 ±1.8 x 10^308。

在C语言中,当进行算术运算时,如果操作数的类型不同,编译器会自动将它们转换为相同的数据类型,以便进行运算。转换的规则是从低级别的数据类型自动转换为高级别的数据类型,以保证运算结果的精度和准确性。
在编程中,了解和合理使用不同级别的数据类型是很重要的,因为它有助于优化代码性能、节省内存空间,并避免一些潜在的错误和问题。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Emgu.CV教程】2.13、基本方法之MinMaxLoc()最大值最小值查找

我们可以简单的把图像看成是一个矩阵,图像算法就转换成对这个矩阵的各种操作,比如加减乘除、矩阵转置、归一化等等,这样对以后的函数理解会更直观。 在图像分割、颜色处理过程中,经常需要统计出图像内的最大值、最小值&#xff0c…

详解Java中@Accessors注解(全)

目录 前言1. 概念2. 属性2.1 fluent属性2.2 chain属性2.3 prefix属性 前言 关于该注解的学习,主要来源项目中涉及,对此进行查漏补缺 Accessors 注解通常用于简化实体类的代码,使其更加简洁和易读。 1. 概念 Accessors 是 Lombok&#xff…

快手面经总结(2024最新)

快手 面经1-一面 开始先是手撕算法两道 自我介绍两道手撕 将字符串转化为整数 (这里当时出现溢出值问题,进行了思考解决,写了两种方式)synchronize , 可以使用的几种形式,代码写出 操作系统 和 数据结构 hash解决冲突 &#xff…

【认知计算】《智能追踪》

故事背景科技相关: 认知计算 意在使计算机系统能够像人的大脑一样学习、思考,并做出正确的决策。 模仿大脑从经验中学习,发现不同事物之间的联系,进而实现逻辑推理和记忆等功能。 认知计算是一种类脑计算模式,源自模…

我的创作纪念日——redis的历史纪录

机缘 最开始只想存留点Redis的操作信息,后来写着写着也就写多了,虽然后面很长时间由于忙就没继续写,但是还是偶尔登录看一下,有好几篇文章的浏览量还是很多的呢。 收获 收获不多,粉丝也才三十多个,浏览量感…

html 原生网页使用ElementPlus 日期控件el-date-picker换成中文

项目: 原生的html,加jQuery使用不习惯,新html页面导入vue3,element plus做界面,现在需要把日历上英文切成中文。 最终效果: 导入能让element plus日历变成中文脚本: elementplus, vue3对应的js都可以通过创建一个vu…

修改 docker /dev/shm 的大小

修改 docker /dev/shm 的大小 1,获取完整id: docker inspect 245| grep Id rootlynxi:~# docker inspect 245| grep Id"Id": "245ab167ed9a79873b31b3a38df2053870fe72f267c3c1a660df25c63e37e88b",2,修改 ShmSize&…

vueRouter 配合 keep-alive 不生效的问题

文章目录 问题说明案例复现demo 结构问题复现和解决 其实这个不生效的问题根本也不算一个问题,犯的错和写错单词差不多,但是也是一时上头没发现,所以记录一下,如果遇到同样的问题,也希望可以帮助你早点看到这个哭笑不得…

网络技术基础入门全套实验-厦门微思网络CCNA实验手册

知识改变命运,技术就是要分享,有问题随时联系,免费答疑,欢迎联系! 微思简介(https://www.xmws.cn) 微思成立于2002年,是一个诚信敬业、积极向上、充满活力、专注技术服务的企业。 微思获得了八…

【SpringBoot+dubbo+zk】实现服务之间rpc通信

0)前置准备&#xff0c;我们使用zk作为注册中心&#xff0c;先启动zk&#xff0c;也就是2181端口。 1)父工程pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http…

[SpringBoot]自定义注解@AutoFill,实现公共字段自动填充(避免重复对时间属性初始化

对于时间属性&#xff0c;如createTime、updateTime在进行插入、修改操作时都要一个个初始化处理&#xff0c;过于麻烦。 可以自定义注解AutoFill作用于INSERT&#xff0c;UPDATE操作方法上&#xff0c;再自定义切面类&#xff0c;统一拦截加入了AutoFill注解的方法&#xff0c…

PAT 乙级 1076 Wifi密码

解题思路&#xff1a;首先这题看着复杂实际很简单&#xff0c;每题就一个正确的我们把他找出来就可以&#xff0c;之后利用和’A’ 相减加一 求出数值&#xff0c;输出即可。python代码更容易 c语言: #include<stdio.h> int main() {int n,i,j,count0;scanf("%d&q…

[ffmpeg系列 03] 文件、流地址(视频)解码为YUV

一 代码 ffmpeg版本5.1.2&#xff0c;dll是&#xff1a;ffmpeg-5.1.2-full_build-shared。x64的。 文件、流地址对使用者来说是一样。 流地址(RTMP、HTTP-FLV、RTSP等)&#xff1a;信令完成后&#xff0c;才进行音视频传输。信令包括音视频格式、参数等协商。 接流的在实际…

【Spring实战】25 Spring Boot Admin 应用

文章目录 1. 查看健康信息2. 使用 Micrometer 和 "/metrics"3. 管理包和类的日志级别4. 其他功能总结 Spring Boot Admin 是一个功能强大的工具&#xff0c;用于监控和管理多个 Spring Boot 应用程序。通过上一篇文章 【Spring实战】24 使用 Spring Boot Admin 管理…

vue-springboot 音乐推荐系统 带歌词的音乐播放器系统设计与实现 7902c

少数民族音乐网站在流畅性&#xff0c;续航能力&#xff0c;等方方面面都有着很大的优势。这就意味着少数民族音乐网站的设计可以比其他系统更为出色的能力&#xff0c;可以更高效的完成最新的音乐信息、音乐资讯、在线交流等功能。 此系统设计主要采用的是JAVA语言来进行开发&…

240107-RHEL8+RHEL9配置安装:NVIDIA驱动(15步)+CUDA(4步)+CUDNN(5步)+GPU压力测试

Section 0: 基础知识 CUDA、cuDNN 和 PyTorch 版本的选择与搭配指南 安装优先级: 显卡驱动 → CUDA → CUDA Toolkit → cuDNN → Pytorch 即显卡驱动决定了CUDA版本&#xff0c;CUDA版本决定了CUDA Toolkit、cuDNN、Pytorch各自的版本提前下载 &#xff5c; CUDA提前下载 &am…

分布式系统架构设计之分布式消息队列基础知识

随着微服务、大数据和云计算的普及&#xff0c;分布式系统已经成为现代软件架构的核心。在分布式系统中&#xff0c;各个组件间的通信和数据交换尤其重要&#xff0c;而消息队列正是实现这一目标的关键技术之一。 在分布式架构设计过程中&#xff0c;架构师们需要对消息队列有…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《基于两阶段随机优化的电能量与深度调峰融合市场出清模型及定价方法》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主的专栏栏目《论文与完整程序》 这个标题涉及到一个电力市场的建模和定价方法&#xff0c;采用了两阶段随机优化的策略&#xff0c;目标是实现电能量与深度调峰的融合。下面是对标题中各个…

逆向一个Go程序

前奏 事先声明&#xff0c;自导自演&#xff0c;纯属为了演示基本的逆向思维 用Go写一段模拟登录的代码&#xff1a; package mainimport ("fmt" )func main() {pass : ""fmt.Print("input password:")fmt.Scan(&pass)if pass "hel…

DTD(文档类型定义)

一、简介 为什么使用DTD 通过 DTD&#xff0c;您的每一个 XML 文件均可携带一个有关其自身格式的描述。 通过 DTD&#xff0c;独立的团体可一致地使用某个标准的 DTD 来交换数据。 而您的应用程序也可使用某个标准的 DTD 来验证从外部接收到的数据。 您还可以使用 DTD 来验…