C语言对类型的转换

【C语言】隐式类型转换和强制类型转换详解 C语言中的数据类型是编程中一个至关重要的概念。在处理不同数据类型的操作时,我们经常需要考虑类型之间的转换。隐式类型转换(也称自动类型转换)和强制类型转换(也称显式类型转换)。本博客将深入讨论这两种转换方式的概念、用法以及注意事项,帮助读者更好地理解C语言中的类型转换机制。提示:以下是本篇文章正文内容,下面案例可供参考C语言中的类型转换是编程中不可避免的一部分,而隐式类型转换和强制类型转换则是两种不同的策略。隐式类型转换使得编程更灵活,但有时也会导致意外行为。 阅读详情

C语言对类型的转换


我们都知道,C语言中内置了多种整形类型,占用空间从大到小,基本满足各类使用场景(比如超长数字的运算就不属此范畴),当程序对大小小于 int 类型的整形进行调用或是储存时,会发生整形提升和截断,当不同类型的数据进行计算时,会发生算数转换

整形提升和截断

整形提升

在C程序中,整形的算术运算总是以缺省(默认)整形类型进行运算的,即使用 int 类型进行运算。因此,在使用 char 等长度小于 int 的类型进行计算时,会发生整形提升。

整形提升规则

对于 signed 类型,高位补充符号位

对于 unsigned 类型,高位补0

注意 整形提升和截断均是对补码的操作

int main()
{
	char a = -1;
	//此时a为 10000001
	//求补码:11111111
	char b = 4;
	//b:00000100

	//此时对a,b进行调用
	char c = 0;
	c = a + b;
	//发生整形提升
	//		  a:11111111 11111111 11111111 11111111
	//		  b:00000000 00000000 00000000 00000100
	//   相加:(1)00000000 00000000 00000000 00000011
	//    0x       00       00       00       03
	 
	return 0;
}

如打印、计算等操作都会发生整形提升

整形提升的意义

通过整形提升,可以对CPU中的运算器件进行复用

对于大多数现代的 CPU 架构来说,整数运算器通常会以特定的字长(word length)为单位进行计算。这个字长通常是指 CPU 寄存器的位数,比如32位或64位,当CPU为32位时,会以 int 为单位进行计算

因此,即使是两个 char 类型的计算,也要转换成两个 int 类型之间的计算。即先转换成 int ,再进行运算

当一个表达式中包含了大于 int 的类型时,宽度超过了 CPU 字长,在运算时需要进行额外的处理,比如拆分成多个操作数进行运算、进行额外的位操作等

截断

以上面这段代码为例,得到的 c 仍旧为 4 bytes ,显然无法存入 char,此时发生截断

截断规则

从低位开始,按照存入空间的大小对整形进行截断,保留低位,丢弃高位

如 char c = 00000011


以下是一个对整形提升和截断的规则进行解析的例子

//使用不当时,整形提升和截断也会造成一些问题
#include <stdio.h>
int main()
{
    char a = -128;
    // 10000000 00000000 00000000 10000000
    // 11111111 11111111 11111111 01111111
    // 11111111 11111111 11111111 10000000
    // 截断,存入a
    // 10000000 -- a
    
    
    // 整形提升,有符号数,高位补1
    // 11111111 11111111 11111111 10000000
    // 打印无符号
    printf("%u\n", a);
    //4294967168
    // %u - 打印无符号整数

    printf("%d\n", a);
    // 11111111 11111111 11111111 10000000
    // 认为是负数,求原码
    // 10000000 00000000 00000000 01111111
    // 10000000 00000000 00000000 10000000
    // -128
    return 0;
}

算数转换

当不同类型的整形之间进行运算时,需要将整形转换为同一类型后进行计算

下面这个表格中位置较低的类型,在遇到位置较高的类型时,会发生算数转换

类型
long double
double
float
unsigned long
long
unsigned int
int
short
char

long long 和 long double 的优先级尚不明确(我还没有找到明确解析)

long double 在 C99 标准中被引入,用以表示更高精度的浮点数

长度可能会应编译器和平台的不同而产生差异,可能和 double 一样长,可能更长(8/12/16Bytes)

C语言的自动类型转换! 自动转换遵循以下规则: 1)若参与运算量的类型不同,则先转换成同一类型,然后进行运算。 2)转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算。 a.若两种类型的字节数不同,转换成字节数高的类型 b.若两种类型的字节数相同,且一种有符号,一种无符号,则转换成无符号类型 3... 阅读详情

相关推荐

Windows上搭建OpenHarmony星闪开发环境:HiSpark Studio全流程指南

嵌入式开发中,环境搭建是项目启动的关键步骤。OpenHarmony作为开源操作系统,其构建体系依赖Python脚本和GN/Ninja工具链,对版本兼容性要求严格。星闪(NearLink)技术作为新一代短距无线通信方案,在时延、并发和抗干扰方面优势显著,广泛应用于智能家居、工业控制等场景。在Windows平台上,通过HiSpark Studio集成开发工具,开发者可高效完成代码编辑、编译、烧录与调试。然而,Python版本冲突、环境变量配置、驱动签名等问题常导致搭建失败。本文详细拆解从系统准备到编译验证的全流

weixin_32658257的博客 342

C语言的类型提升机制

当在表达式中涉及这些类型的混合运算时,较小的类型会被提升为较大的类型。①char和short在大多数情况下会被提升为int。②如果int可以表示char或short的所有值,则char和short会被提升为int。③如果int不能表示char或short的所有值(这种情况很少见,通常只在某些特殊硬件上发生),则char和short会被提升为。④int和在运算时不会被提升为更大的类型,除非与更大的类型(如long)混合使用。⑤long和在运算时通常不会被提升为long long,除非与long long。

qq_59757948的博客 789

基于FPGA的TDC延迟链优化与码密度校准方法(1)——原理与实现

本文深入探讨了基于FPGA的时间数字转换器(TDC)延迟链非均匀性问题及其码密度校准方法。通过分析工艺偏差、温度电压影响等根源,详细介绍了码密度测试原理、逐位校准技术及气泡消除算法,并分享了自适应校准策略与多场景应用实践,有效提升TDC测量精度至皮秒级。

kiwi8的博客 488

C语言的数据的强制类型转换

定义:强制类型转换是把变量从一种类型转换为另一种数据类型。 强制类型转换算是C语言中常见常考的一项内容,如对于类型处理不好,将会产生错误结果。对于某些类型的转换编译器可隐式地自动进行,不需人工干预,称这种转换为自动类型转换;而有些类型转换需要编程者显式指定,通常,把这种类型转换称为强制类型转换 计算机硬件进行算术操作时,要求各操作数的类型具有相同的大小(存储位数)及存储方式。 ...

wang647861136的博客 5万+

Jmeter压测报告

账户分析压测报告 一、测试内容 本次测试是针对账户分析进行的压力测试,在账户分析查询接口中,只对用户资产查询接口进行压力测试,其中不包含用户签名校验功能。 二、测试方法 本次采用apache的开源测试工具jmeter,采用本地动态拼装请求数据并通过http协议GET方式发送每日盈亏查询请求。并采用1000个用户账号测试访问情况。...

qq_31108731的博客 6627

Codex接入CCSwitch:本地代理与模型路由配置指南

在AI编程工具链中,本地代理与模型路由是连接智能体与模型服务的核心桥梁。Codex作为OpenAI推出的编程智能体,虽然具备强大的仓库理解和自主编码能力,但其默认模型链路固定,导致在多模型切换、内网统一管理及成本控制上存在天然瓶颈。CCSwitch正是为解决这一痛点而生的本地代理工具,它通过OpenAI兼容协议将Codex的请求透明转发至DeepSeek、通义千问等第三方模型服务,使模型切换如同点击按钮般简单。本文从本地代理和模型路由器的基础原理切入,系统讲解Codex与CCSwitch的安装配置、模型ID

weixin_33910460的博客 427

C语言数据类型转换

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库 代.

qq_51163115的博客 2万+

SQL的基本介绍

1.什么是数据库?2.什么是数据库管理系统?3.什么是 SQL?1.数据库是保存有组织的数据的容器,通常是一个文件或一组文件,可以将其看作电子化的文件柜。用户可以对文件中的数据执行新增、删除、更新、查询等操作。2.数据库管理系统是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。用户可以通过 DBMS 访问数据库中的数据,数据库管理员也可以通过 DBMS 进行数据库的维护工作。

shiwei0813的博客 2879

【C语言笔记】C语言数据类型转换

C语言中有很多数据类型,这些数据类型在内存中的存储形式不一样,为了计算方便,编译器不得不将某一种数据类型转换成另一种数据类型。本篇将介绍C语言中各种数据类型转换的规则。

kk702392702的博客 9120

猿创征文|SfM(Structure from Motion)学习之路

SfM全称Structure from Motion,译为运动恢复结构,是三维重建pipeline的一部分,又称稀疏重建,在摄影测量领域则称为空三(空中三角测量)。SfM的任务是,给定一系列具有一定重叠度的图像,去同时估计出拍摄每张图像时相机的的位姿(位置t和姿态R)和被拍摄物体或场景的稀疏点云。...............

zeeq的博客 1万+

基于NARX和NARX-LSTM的模型辨识与MPC控制系统调试与优化

本文针对两输入单输出非线性系统,提出基于NARX和NARX-LSTM的模型辨识与MPC控制优化方案。系统输入为固定量u1和可调量u2(8.5-140),输出目标为-0.58。现有模型存在辨识精度不足、历史输出依赖过重、预测偏差等问题。解决方案包括:数据差分处理改善非平稳性、调整延迟阶数优化模型结构、引入注意力机制替代手动加权、改进损失函数消除预测偏差。MPC控制器将结合优化模型,考虑控制变量步长约束(≥2),实现输出稳定控制。通过系统性的模型调试与控制算法优化,最终形成完整的非线性系统辨识与控制框架。

huanghm88的专栏 128

C语言程序——类型强制转换

C语言中强制类型转换的应用

glx6666的博客 2万+

季节性注意力的时间序列预测模型 SAITS 进行数据补齐 完整代码数据

季节性注意力的时间序列预测模型 SAITS 进行数据补齐 完整代码数据

1071

C语言 类型转换

C语言 类型转换一般是为了解决如下的一些问题: 算术运算中或者逻辑判断表达式中操作室,不匹配的时候。 赋值时,如果左右操作数类型不匹配。 函数传递进去的实参和匹配的形参对应不上。 函数返回的表达式的类型和函数返回类型不匹配。 出现上述问题我们一般会进行相应的类型转换 否则编程在调试的时候会出现警告甚至报错。 C语言中类型转换主要分为两种: 1. 隐式类型转换 2. 显示类型转换 隐式类型转换:编译器自动将左右操作数变成相同类型去计算。 显式类型转换:程序开发者主观上去将类型强制转换。 在类型转换

Mi-ronin的博客 8544

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

c语言中怎么转换类型数据类型,C语言中数据类型转换

C语言的类型转换,可以分为两种:自动类型转换(隐式类型转换,有编译器帮你去完成)和强制类型转换(你知道自己想要什么,所以才转换)。对于自动类型转换,最常见的就是混合运算以及赋值运算,还有一种就是函数值的类型转换赋值运算:自动把“=”右边的表达式的类型转换成“=”右边的变量的类型,例如 int a=4.5; a的值实际是4!混合运算:就是一个运算表达式当中包含了多个类型,这时候就需要有类型转换。当运...

weixin_35698091的博客 6309

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

C 语言类型转换

若原浮点值超出int可表示范围(≈±2.1e9),结果未定义// 未定义行为,可能得极大不确定值或崩溃整数间转换:位模式复用(补码规则)等长:改变解释方式不等长:符号/零扩展或截断浮点间转换:精度调整float→double:无损扩展double→float:精度裁切整浮转换:数值重构整数→浮点:可能精度丢失浮点→整数:截断小数+溢出风险指针转换:内存视角切换对象指针:危险但有时必要void指针:安全中介🧠终极心法看位模式?看数值?看内存?整数转换:重点看位模式变化浮点转换:重点看。

2501_92019824的博客 1632

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

C语言类型转换

C语言类型转换 C语言的类型转换有两种: (1)隐式的类型转化 :C编译器在运行的时候,如果一个运算符两边的运算数类型不同,编译器会自动的将其转换为相同的类型,即较低 类型转换为较高类型,然后再参加运算。编译器这样做的目的也是为了防止数据失真。 转换的低高级看如下图片: 图片来源:https://www.runoob.com/cprogramming/c-type-casting.html 编译...

辉小歌的博客 1978

怎样在 C 语言中进行类型转换?

某些类型转换可能导致未定义的行为。例如,将一个指向一个对象的指针转换为一个不相关类型的指针,并通过该指针进行访问。// 不合法的指针类型转换// 未定义行为return 0;

技术笔记 2071

c语言中的类型转换

    首先引出一个问题,这是我在编写模拟器程序的时候遇到的,我们有如下的类型转换:       int16_t     v16s;       uint16_t   v16u;       int32_t     v32s;       uint32_t   v32u;       v16s = 0xf08b;     v16u = (uint16_t)v16s; //请问此时v16s和v16u

秋枫林的专栏 3万+

C语言强制类型转换

强制类型转换是把变量从一种类型转换为另一种数据类型。例如,如果想存储一个 long 类型的值到一个简单的整型中,需要把 long 类型强制转换为 int 类型。可以使用强制类型转换运算符来把值显式地从一种类型转换为另一种类型,如下所示: (type_name) expression 请看下面的实例,使用强制类型转换运算符把一个整数变量除以另一个整数变量,得到一个浮点数: #include <stdio.h> int main() { int sum = 17, count =

事后不诸葛的博客 1万+

C语言之类型转换

C语言隐式类型转换和强制类型转换,整型提升。

weixin_56810796的博客 2180

c语言——类型的强制转换

类型转换是处理不同数据类型间交互的重要手段。当我们写下这样的代码时,就涉及到了强制类型转换。这行代码调用sqrt函数计算n的平方根,该函数返回的是double类型的值,而通过(int)的强制转换,将结果转换为int类型,直接舍弃小数部分,只保留整数部分。下面,我们将深入探讨强制类型转换的方方面面。

2301_80931230的博客 2011

【类型转换】C语言的类型转换

文章目录1.自动类型转换2.赋值中的类型转换3.强制类型转换 1.自动类型转换 字符型变量的值实质上是一个8位的整数值,因此取值范围一般是-128~127,char型变量也可以加修饰符unsigned,则unsigned char 型变量的取值范围是0~255(有些机器把char型当做unsighed char型对待, 取值范围总是0~255)。 如果一个运算符两边的运算数类型不同,先要将其转换...

Eternally123的博客 1070

C语言【隐式类型转换】和【显式类型转换】

C语言是一种强类型语言,当使用一种类型代替另外一种类型进行操作时或者存在两个不同类型的对象进行操作时,首先就得进行类型的转换然后再说其他。而类型转换的方式一般可分为隐式类型转换(也称:自动类型转换)和显示类型转换(也称:强制类型转换),两者有着本质上的区别。隐式类型转换是由编译器自动进行的,不需要人为的干预,而且我们也观察不到类型是如何进行转换的,所以被称为:“ 隐式 ”。而显式类型转换是由程序员明确指定的,所以才被称为:“ 强制类型转换 ”。

lijian2017的博客 3725

c语言强制类型转换例子简单,c语言怎么进行强制类型转换

在c语言中,可以通过“(新类型名称) 数据或表达式”语句来进行强制类型转换。强制类型转换是程序员明确提出的、需要通过特定格式的代码来指明的一种类型转换。本教程操作环境:windows7系统、c99版本、Dell G3电脑。数据类型转换就是将数据(变量、数值、表达式的结果等)从一种类型转换为另一种类型。c语言有两种数据类型方式:自动类型转换:就是编译器默默地、隐式地、偷偷地进行的数据类型转换,这种转...

weixin_32629853的博客 8207

C语言中的数据类型转换

C语言中的数据类型转换一般分为两种,自动转换和强制转换。 自动转换 自动转换发生在不同数据类型的量混合运算时,由编译系统自动完成。自动转换遵循以下规则: 1.若参与运算量的类型不同,则先转换成同一类型,然后进行运算。 2.转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算。 3.所有的浮点运算都是以双精度进行的,即使仅含float单...

liebecl的博客 1万+
上一篇: fgets的使用方法详解
下一篇: C语言的数据存储详解
flashier
博客等级 码龄3年 381粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值