avatar

zian

A text-focused Halo theme

  • Java
  • 面试
  • 首页
  • C语音
  • liunx
  • 数据结构与算法
  • 控制台
Home 02.类型转换
文章

02.类型转换

Posted 2024-12-25 Updated 2025-01- 3
By Administrator
7~10 min read

类型转换

在开发中经常需要涉及类型之间的相互转换。

首先我们先观察一个例子

    int *p;

    char c;
    short s;
    int n;
    long l;
    float f;
    double d;

    p = c; // 警告, 将 char 赋值给 int * 没有进行强制类型转换
    p = s; // 
    p = n; //
    p = l; // 
    p = f; // 错误 float 不可以转换为 int *
    p = d; // 错误 double 不可以转换为 int *

有符号数字类型转换

概念: 比 int 小的都转为 int ,比int大的不变

    int *p;

    char c;
    short s;
    int n;
    long l;

    p = c + c; // int
    p = s + s; // int
    p = n + n; //int
    p = l +  l; // long int

无符号数字类型转换

概念: 比 int 小的都转为 int , unsigned int 还是自身, unsigned long 也是自身

int < unsigned int < unsigned long

浮点转换是相同类型

    int *p;
    float f;
    double d;

    p = f + f; // float
    p = d + d; // double

float < double

不同类型之间的转换

    int *p;
    char c;
    short s;
    int n;
    long l;


    p = c + s; // int
    p = c + n; // int
    p = c + l; // long int
int *p;

    unsigned char c;
    unsigned short s;
    unsigned int n;
    unsigned long l;

    p = c + s; // int
    p = c + n; //unsigned int
    p = c + l; // long unsigned int
    p = n + l; // long unsigned int
    int *p;

    char c;
    short s;
    int n;
    long l;
    unsigned char uc;
    unsigned short us;
    unsigned int un;
    unsigned long ul;

    p = c + uc;
    p = s + us; 
    p = c + n;
    p = c + un;
    p = l + ul;

从以上的例子可以看出自动类型转换的规律: 小于int的类型都自动类型转换为int型,int自身就是int型,大于int型自动类型转换时转换为最大类型向,类型大小排序:

char < unsigned char < short < unsigned short < int < unsigned int < long < unsigned long < float < double

不同类型的浮点型运算 float 转换成 double;

注意

  1. 任何整数类型与float运算都会转为float型
  2. 任何整数类型与double运算都会转为double型

总结:

隐式转换:

  1. 比 int 小的全部转换为 int 在进行运算
  2. int 以上的包括 int , 看 哪个大,哪个大就听哪个的
  3. 与浮点型就运算,都转换为浮点型。
  4. float 比 double 小,float 和 double 运算,转换都double

强制类型转换

公式: (类型)需要转换的数据

int n1 = 5, n2 = 2;

printf("%f \n", (float)n1 / n2);
printf("%f \n", (double)n1 / n2);
C语音
License:  CC BY 4.0
Share

Further Reading

Jan 7, 2025

C语言 其他

作用域 关键字 register 在C语言中,register 关键字是一种存储类说明符,用于建议编译器将变量存储在CPU寄存器中,而不是内存中。这样做可以提高访问变量的速度,因为寄存器的访问速度通常比内存快得多。然而,这个关键字只是一个提示,编译器可以选择忽略它。 使用register关键字的变量

Jan 6, 2025

C语言 结构体

结构体 问题的引入 多个相同数据类型的数据可以用数组表示,那么,如果多个不同数据类型的数据如何用一个集合表示呢?? 前面我们所介绍的普通数据类型实际上远远未能满足我们对实际应用中的要求,比如说一个学生,可能包含的属性有年龄、姓名、分数等等,不可能用一个基本数据类型(int 、float 、char)

Dec 28, 2024

C语言 内存

内存 什么是内存 软件在运行是,临时用来存储数据的 操作系统会将内存按照字节划分为 N 多个小格子 什么是内存地址 其实就是格子的编号 32 位操作系统:以 32 位的二进制表示 64 位操作系统:以 64 位的二进制表示 内存地址的作用 快速操作内存中存储的数据 C 语言中如何获取内存地址 &变量

OLDER

C 语言 函数 (封装)

NEWER

嵌入式

Recently Updated

  • 其他
  • Elasticsearch 面试
  • Spring 面试
  • RabbitMQ 面试
  • Redis 面试

Trending Tags

ruoyi docker java

Contents

©2025 zian. Some rights reserved.

Using the Halo theme Chirpy