目录

文章目录

  • 目录
  • 前文列表
  • 数据类型转换
    • 隐式(自动)类型转换
      • 常用的算术转换
    • 显式(强制)类型转换
  • 字符串转换为数字类型:atoi、atol、atof

前文列表

《程序编译流程与 GCC 编译器》
《C 语言编程 — 基本语法》
《C 语言编程 — 基本数据类型》
《C 语言编程 — 变量与常量》
《C 语言编程 — 运算符》
《C 语言编程 — 逻辑控制语句》
《C 语言编程 — 函数》
《C 语言编程 — 高级数据类型 — 指针》
《C 语言编程 — 高级数据类型 — 数组》
《C 语言编程 — 高级数据类型 — 字符串》
《C 语言编程 — 高级数据类型 — 枚举》
《C 语言编程 — 高级数据类型 — 结构体与位域》
《C 语言编程 — 高级数据类型 — 共用体》
《C 语言编程 — 高级数据类型 — void 类型》
《C 语言编程 — 数据类型的别名》

数据类型转换

C 语言中如果一个表达式中含有不同类型的常量和变量,在计算时,会将它们自动转换为同一种类型。此外,在 C 语言中也可以对数据类型进行强制转换。

在编程时,有需要类型转换的时候都用上强制类型转换运算符,是一种良好的编程习惯。

隐式(自动)类型转换

  • 浮点数赋给整型,该浮点数小数被舍去;
  • 整数赋给浮点型,数值不变,但是被存储到相应的浮点型变量中;
#include <stdio.h>int main(){int  i = 17;char c = 'c'; /* ascii 值是 99 */int sum;sum = i + c;printf("Value of sum : %d\n", sum );}

常用的算术转换

常用的算术转换是隐式地把值强制转换为相同的类型。编译器首先执行整数提升(把小于 int/unsigned int 的整数类型自定转换为 int/unsigned int 的过程),如果操作数类型不同,则它们会被转换为下列层次中出现的最高层次的类型:


注意,常用的算术转换不适用于赋值运算符以及逻辑运算符。

显式(强制)类型转换

强制类型转换是把变量从一种类型转换为另一种数据类型。例如,如果您想存储一个 long 类型的值到一个简单整型中,就需要把 long 类型强制转换为 int 类型。此时,就可以使用 强制类型转换运算符(类型标识符)(表达式)

#include <stdio.h>int main() {float f, a, x=3.6, y=5.2;int i=4, b;a = x + y;b = (int)(x + y);f = 10 / i;printf("a=%d, b=%d, f=%f, x=%f\n", a, b, f, x);return 0;
}

运行:

$ ./main
a=8.799999, b=8, f=2.000000, x=3.600000
#include <stdio.h>int main() {int sum = 17, count = 5;double mean;mean = (double)sum / count;// mean = (double)(sum / count);  此时返回 3.000000printf("Value of mean: %f", mean);return 0;
}

需要注意的是,强制类型转换运算符的优先级大于除法,因此 sum 的值首先被转换为 double 型,然后除以 count,得到一个类型为 double 的值。注意,如果是 (double)(sum / count) 的话,则会先进行整数运算得到 3 再类型转换为双精度浮点数 3.000000。

运行:

$ ./main
Value of mean: 3.400000

字符串转换为数字类型:atoi、atol、atof

C 语言的 stdlib.h 提供了 atoi、atol、atof 函数,用于将字符串类型变量转换为 int、long、float 类型的数字。

  • atoi 会扫描参数 nptr 字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时(e.g. ‘\0’)才结束转换,并返回整型数。否则,返回零。
int atoi(const char *nptr);
  • atol 字符串类型转换为 long 类型,同上。
long atol(const char *nptr);
  • atof 字符串类型转换为 float 类型。atof 会扫描参数字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时(e.g. ‘\0’)才结束转换,并将结果返回。参数 nptr 字符串可包含正负号、小数点或 E/e 来表示指数部分,如:123.456 或 123e-2。返回值是转换后的浮点型数。
double atof(const char *nptr);

示例:

#include <stdlib.h>
#include <stdio.h>int main(void)
{int n;char *str = "23.5";n = atoi(str);printf("string=%s,n=%d\n", str, n);return 0;
}

C 语言编程 — 数据类型转换相关推荐

  1. Go 语言编程 — 数据类型转换

    目录 文章目录 目录 数据类型转换 []byte => other type int => other type string => other type other type =& ...

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

    C语言的类型转换,可以分为两种:自动类型转换(隐式类型转换,有编译器帮你去完成)和强制类型转换(你知道自己想要什么,所以才转换). 对于自动类型转换,最常见的就是混合运算以及赋值运算,还有一种就是函数 ...

  3. 【C语言】数据类型转换的问题

    数据类型转换应该注意以下问题: 有符号数和无符号数之间的转换.例如,由signed型转换为等长unsigined型数据时,符号位成为数据的一部分,即负数转换为无符号数时,数值将发生变化.同理,由uns ...

  4. firebird转mysql_Firebird数据库语言参考-数据类型转换

    数据类型转换 在编写一个表达式或指定一个操作,目标应该使用兼容的数据类型对于操作数.当需要使用混合的数据类型发生时,它提示应该寻找一种方式转换不兼容的操作数在对它们进行操作之前.转换数据的能力很可能是 ...

  5. Rust FFI 编程--理解不同语言的数据类型转换

    1. 简介 "FFI"是" Foreign Function Interface"的缩写,大意为不同编程语言所写程序间的相互调用.鉴于C语言事实上是编程语言界的 ...

  6. 玩转Go语言之数据类型转换

    前言: 文章内容可能需要C语言的基础知识,如果不懂C语言请自行学习,编程不懂C语言跟咸鱼有什么区别,推荐一个不错的C语言课程Link:http://www.it666.com/my/course/2 ...

  7. JS与C语言的数据类型转换

    在C语言中,定义一个变量就必须先指定其类型,比如int,float,double,指针等. JS的基础类型只有undefined.null.number.boolean.string,引用类型为Obj ...

  8. c语言常用数据类型转换整理

    你要发送原始数据流 还是 格式化输出? 如果是格式化 按原子说的 ,用sprintf / printf; 如果发送原始内存数据流, 可按下面发送, 发送 #define BYTE0(pointer) ...

  9. C 语言编程 — 指令行参数

    目录 文章目录 目录 前文列表 命令行参数 前文列表 <程序编译流程与 GCC 编译器> <C 语言编程 - 基本语法> <C 语言编程 - 基本数据类型> < ...

最新文章

  1. JS打印页面指定区域
  2. 【Netty】 异步任务调度 ( TaskQueue | ScheduleTaskQueue | SocketChannel 管理 )
  3. [USACO14JAN]记录奥林比克
  4. 如何在Swift中使用CoreData设置有用的自动完成UITextField
  5. 使用Python往Elasticsearch插入数据
  6. 创建对象的内存理解(图示)
  7. 分发服务器linux,Linux-LVS分发服务器
  8. 使用 virt-install 创建虚拟机
  9. 学习写 Makefile
  10. Windows组策略
  11. Google搜索引擎的使用技巧
  12. 比较两个路径的几种方式
  13. 食肉动物和食草动物的双眼分布不同的原因
  14. 什么是敏捷管理 常用的敏捷Scrum会议有哪些
  15. 日元兑人民币用计算机怎么算,日元兑换人民币是以什么计算?谢谢我有日元 – 手机爱问...
  16. Linux下USB驱动框架分析
  17. Opencv学习----Opencv宏定义(CV_8U、CV_8S、CV_16U...)
  18. 使用selenium模拟动态登录QQ邮箱爬取收件箱内容放在CSV文件中
  19. 微信考勤 | 微信智慧解决方案
  20. 基于Web的在线考试系统

热门文章

  1. mysql 导入设置编码_从MySQL导出导入数据库的命令实例及设置会话字符编码
  2. jbutton可以设置id吗_Java JButton.setHorizontalTextPosition方法代碼示例
  3. java class 生成对象_Java反射机制(创建Class对象的三种方式)
  4. 2022年度BCI奖 |THE ANNUAL BCI AWARD
  5. Santa Cruz 上手测试,动作控制器自由度惊人
  6. 如何使用Hololens 这些手势你都要学
  7. 2040张图片训练出的ViT,准确率96.7%,连迁移性能都令人惊讶 | 南京大学
  8. 用GAN也可以P图,效果还不输PS | 英伟达出品
  9. 谷歌首款Tensor手机芯片,全是AI炫技,性能一笔带过
  10. 扫地机器人能有多硬核?好家伙自动驾驶、激光扫描、NLP这些硬科技全上了,科沃斯:技术创新才能打破行业内卷...