C语言:强制类型转换、自动类型转换

C语言中类型转换有两种方式:即强制类型转换和自动类型转换。

一、强制转换比较简单,为:(类型)操作对象。

        int n1 = 5, n2 = 2;

float f1 = (float) 5 / 2; //结果为2.5000,若不强制转换结果为2.000

其它类型的自动转换这个一样

二、自动类型转换有以下几个规则

  1. 类型级别低于等于int的,运算结果为int类型。高于int类型,保持高级别类型
  2. 无符号类型级别高于有符号类型(unsigned > signed)
  3. 浮点型级别高于有符号、无符号整型(与浮点运算,结果都为浮点型)
  4. 双精度浮点级别高于单精度浮点(double > float)

 

#include <stdio.h>
/*
时间:2022-04-05 19:26
作者:sgbl888
功能:C语言类型转换(自动转换、强制转换)
    一、自动转换:由C语言按规则转换
        1、低于等于int类型的,转换结果为int类型。高于int保持高级别的类型
        2、unsigned无符号级别高signed有符号的类型
        3、浮点型级别最高(double>float>unsigned>signed)
    二、强制转换:(类型)操作对象
        1、如:(float)10、(int)1.23、(double)1.45678、(short)99
*/
int main(){
    
    //强制转换,只演示float,其它都是 (类型)操作对象
    int a1 = 5, a2 = 2;
    float a3 = (float) 5 / 2; //结果为2.5000


    printf("---------下面为自动类型转换代码段----------\n");

    int* p; //整型指针变量(后面会讲到,这边先了解下即可),可根据错误信息判断运算结果是什么类型。

    //有符号不同类型运算,运算结果如果小于等于int,结果为int类型。若高于int类型则为高级别类型
    char c1 = 65;
    short s1 = 128;
    int n1 = 4567;
    long l1 = 7890;
    long long ll1 = 12345678;
    p = c1 + s1; //提示:'int *' from 'int' ,说明c1+s1的结果为int类型
    p = n1 + l1; //提示:'int *' from 'long int',结果为高级别类型long int
    p = l1 + ll1; //提示:'int *' from 'long long int',结果为long long int

    //无符号不同类型运算,跟上面的规则是一样的(其它类型不再演示)
    unsigned char c2 = 65;
    unsigned short s2 = 128;
    unsigned int n2 = 4567;
    unsigned long l2 = 7890;
    p = c2 + s2; //提示:'int *' from 'int',同样结果为int类型。

    //有符号跟无符号运算(同级别类型,无符号高于有符号)
    p = c1 + s2; //因c1、c2类型都低于int,因为结果还是为有符号int
    p = n1 + n2; //提示:'int *' from 'unsigned int'。因unsigned>signed,结果为:unsigned int
    p = s1 + n2; //提示:'int *' from 'unsigned int'。因为n2为无符号int,它又比int高。因此结果为无符号int类型.

    //有符号、无符号与浮点运算,结果都为浮点,因浮点级别比其它高。dobule又高于float
    float f1 = 123.4F; //因字面浮点常量在C语言默认是double,加F或f表示float类型
    double d1 = 4567.8901;
    p = n2 + f1; //提示:'int *' from type 'float,结果为float类型
    p = l1 + d1; //提示:'int *' from type 'double',结果为double类型
    p = 1.234; //提示:'int *' from type 'double',说明字面浮点常量默认为double类型

    return 0;
}

 

 

  • 10
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值