C语言基础隐式类型转换与强制类型转换示例解析

 更新时间:2021年11月18日 16:41:02   作者:RookieStriver  
最接地气的有关类型转换的介绍,此处对于类型转换的相关知识点做一些简要的介绍,作者实属初学,难免文章中有内容理解不到位或者有不当之处,还请朋友们不吝指正,希望大家多多给予支持

类型转换

数据有不同的类型,不同类型数据之间进行混合运算时必然涉及到类型的转换问题。

转换包括隐式类型转换和强制类型转换。

类型转换的原则:占用内存字节数少(值域小)的类型,向占用内存字节数多(值域大)的类型转换,以保证精度不降低。

在这里插入图片描述

隐式类型转换

隐式转换也称为自动转换,遵循一定的规则,由编译器自动完成。
C的整型算数运算总是至少以缺省整型类型的精度来进行,为了获得这个精度,表达式中的字符和短整形操作数在使用之前都被转换成普通整型,这种转换为整型提升。

整型提升:通用CPU是难以直接实现两个8比特位直接相加运算。所以表达式中各种长度可能小于int长度的整型值,都必须转换为int或者unsigned int ,然后才能送入CPU去执行运算。

代码示例1:

int main()
{
	char a = 5, b = 126;
	//5:00000000 00000000 00000000 00000101
	//a:0000 0101(截断操作)
	//126:00000000 00000000 00000000 01111110
	//b:0111 1110
	//当a和b相加时,都是char类型,就会发生整型提升
	//int c = 000000000000000000000000 00000101 + 000000000000000000000000 01111110
	//char c = 10000011(整型截断)
	//以%d 打印,再次在内存中整型提升,再打印原码
	//int c = 11111111111111111111111110000011(补码)
	//打印原码:10000000000000000000000011111101
	char c = a + b;
	printf("%d\n", c);
	return 0;
}

在这里插入图片描述

如何整型提升:按照变量的数据类型的符号位来提升。

代码示例2:

//负数的整型提升
char s1 = -1;
变量s1的二进制补码中只有8个比特位 11111111
因为char是有符号的,所以在整型提升的时候,高位补充符号位
即:11111111 11111111 11111111 11111111
//正数的整型提升
char s2 = 1;
变量s2的二进制补码中只有8个比特位 00000001
因为char是有符号的,所以在整型提升的时候,高位补充符号位
即:00000000 00000000 00000000 00000001

无符号数的整型提升,高位直接补0;

代码示例3:

隐式转换

int main()
{
	int num = 5;
	printf("s1=%d\n", num / 2);
	printf("s2=%lf\n", num / 2.0);
	return 0;
}
s1=2
s2=2.500000
请按任意键继续. . .

强制类型转换

强制类型转换指的是使用强制类型转换运算符,将一个变量或表达式转化成所需的类型

代码示例1:

#include <stdio.h>
int main()
{
	float x = 0;
	int i = 0;
	x = 3.6f;
	i = x;			//x为实型, i为整型,直接赋值会有警告
	i = (int)x;		//使用强制类型转换
	printf("x=%f, i=%d\n", x, i);
	return 0;

OK!!!观众老爷们,这里只是介绍了有关类型转换的入门知识,如果朋友们觉得有一点点作用的话,希望朋友们能够给予小菜鸟一点支持!后续继续给朋友们带来更好的博文,还希望朋友们能够继续关注,小菜鸟致力于把自己的学习经验与个人理解更多的分享给大家,望大家喜欢与指正,请大家以后多多支持脚本之家!

相关文章

  • C/C++ QT实现解析JSON文件的示例代码

    C/C++ QT实现解析JSON文件的示例代码

    JSON是一种轻量级的数据交换格式,它是基于ECMAScript的一个子集,使用完全独立于编程语言的文本格式来存储和表示数据。这篇文章主要介绍了QT实现解析JSON文件的示例代码,需要的可以参考一下
    2022-01-01
  • C++实现线程池的简单方法示例

    C++实现线程池的简单方法示例

    这篇文章主要给大家介绍了关于C++实现线程池的简单方法,文中通过示例代码介绍的非常详细,对大家学习或者使用C++具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-05-05
  • opencv2基于SURF特征提取实现两张图像拼接融合

    opencv2基于SURF特征提取实现两张图像拼接融合

    这篇文章主要为大家详细介绍了opencv2基于SURF特征提取实现两张图像拼接融合,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • C++标准库bitset类型的简单使用方法介绍

    C++标准库bitset类型的简单使用方法介绍

    这篇文章主要介绍了C++标准库bitset类型的简单使用方法,需要的朋友可以参考下
    2017-07-07
  • C生万物C语言宏将整数二进制位的奇偶数位交换

    C生万物C语言宏将整数二进制位的奇偶数位交换

    这篇文章主要为大家介绍了C生万物C语言使用宏将整数二进制位的奇偶数位交换示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • C语言基于回溯算法解决八皇后问题的方法

    C语言基于回溯算法解决八皇后问题的方法

    这篇文章主要介绍了C语言基于回溯算法解决八皇后问题的方法,简单描述了八皇后问题,并结合实例形式分析了C语言使用回溯算法解决八皇后问题的相关操作技巧,需要的朋友可以参考下
    2018-06-06
  • 快速了解C语言静态关键字static的作用

    快速了解C语言静态关键字static的作用

    这篇文章主要介绍了C语言中静态关键字static的作用,对大家学习C语言非常有帮助,有需求的小伙伴可以参考下
    2020-05-05
  • VC++开发中完美解决头文件相互包含问题的方法解析

    VC++开发中完美解决头文件相互包含问题的方法解析

    本文中,为了叙述方便,把class AClass;语句成为类AClass的声明,把class AClass开始的对AClass的类成员变量、成员函数原型等的说明称为类的定义,而把在CPP中的部分称为类的定义
    2013-09-09
  • VS2010 C++ 配置优化方案

    VS2010 C++ 配置优化方案

    使用VS2010的时候,发现了不少问题,而本文则是介绍使用中需要的问题,已经解决方案。
    2014-10-10
  • c++对象内存布局示例详解

    c++对象内存布局示例详解

    C++类的内存布局跟结构体有点像,实际上,类中成员变量的内存布局规则跟结构体是一样的,区别在于函数,虚函数的放置,下面这篇文章主要给大家介绍了关于c++对象内存布局的相关资料,需要的朋友可以参考下
    2021-10-10

最新评论