7

c语言学习笔记—数据类型转换

 1 year ago
source link: https://blog.51cto.com/u_15910342/5938466
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

c语言学习笔记—数据类型转换

精选 原创

君不见ing 2022-12-14 23:30:37 博主文章分类:c语言 ©著作权

文章标签 强制转换 C语言 学习笔记 文章分类 C/C++ 编程语言 yyds干货盘点 阅读数238

一、强制转换

 强制转换,是通过类型转换运算来实现的。其一般形式为:(类型说明符)  (表达式)  其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。

格式:(类型说明符)(表达式)

二、隐式类型转换

1、整型提升 (仅作用于char,short)

1.1、整型提升的解释

  C的整型算数运算中至少以整数类型的精度来进行。为了获得这个精度,表达式中的char和短整型short操作数再使用之前会被转换为普通的整型,这种转换叫做整型提升。

c语言学习笔记—数据类型转换_C语言

b和c的值被提升为普通整型,然后在执行加法运算。

加法运算完成之后,结果将被截断(char字节长度不够用),然后再存储在a中。

c语言学习笔记—数据类型转换_强制转换_02

1.2、整型提升的规则:

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

1.2.1、负数的整形提升

char c1 = -1;

变量c1的二进制位(补码)中只有8个比特位:1111111

因为char为有符号的char

所以整形提升的时候,高位补充符号位,即为1提升之后的结果是:

11111111111111111111111111111111

1.2.2、正数的整形提升

char c2 = 1;

变量c2的二进制位(补码)中只有8个比特位:00000001

因为char为有符号的char

所以整形提升的时候,高位补充符号位,即为0提升之后的结果是:

00000000000000000000000000000001

1.2.3、无符号整型提升

1.3、整型提升的意义∶

 表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节长度—般就是int的字节长度,同时也是CPU的通用寄存器的长度。

  因此,即使两个char类型的相加,在CPU执行时实际上也要先转换为CPU内整型操作数的标准长度。

  通用CPU ( general-purpose CPU )是难以直接实现两个8比特字节直接相加运算(虽然机器指令中可能有这种字节相加指令)。所以,表达式中各种长度可能小于int长度的整型值,都必须先转换为int或unsigned int,然后才能送入CPU去执行运算。

2、算术转换

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

c语言学习笔记—数据类型转换_强制转换_03

注意事项:算术转换要合理,不然会存在潜在问题。

c语言学习笔记—数据类型转换_学习笔记_04
  • 收藏
  • 评论
  • 分享
  • 举报

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK