C语言数据类型--------不同类型之间的赋值问题

本文探讨了C语言中不同整型数据(如char,int,short)之间的赋值行为,强调了在大小不同时如何根据数据类型和符号位进行自动转换,以及具体的转换规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

前言:众所周知在C语言中,仅仅就4种数据类型 ---- 整型,浮点型,指针,聚合类型(数组和结构),其他的类型都是从者四种类型种派生出来的。但不同类型之间如果我要对其进行赋值会发生什么。

# 不同类型的整型之间的赋值问题

    在C语言中允许不同类型的整数之间可以相互赋值

    char a;    //8bits

    int  b;    //32bits

    short c;   //16bits

    a = b;      //YY

    c = a;     //YY

    为什么长度,不一样,你如何赋值的!

   

    很标准的一个C语言的建议:

        (1)、长 ------ 短

                高字节直接就pass(丢弃),低字节直接拷贝

        (2)、短 ----- 长

                低字节直接拷贝,高字节我们补什么呢?

                    if 短的是有符号位,高位就全部补符号位

                    if 短的是无符号位,高位就全部补0;

    eg:

        假设运行如下的代码的机器是32bits    

        unsigned char c = 250;

        char d;

        d = c+8;

        printf("%d\n",d);  //2

        printf("%u\n",d);  //2

        c : 8bits

            1111 1010

        c+8 :

            c - > 32 bits : 短的----》长的 c:unsigned , 高位全部补 0

            1111 1010

            00000000    00000000    00000000    00001000 8

            00000000    00000000    00000000    11111010 c

            00000000    00000000    00000001    00000010 c+8

        c+8 ---》d      长 ----- 》 短  低字节直接拷贝,高字节字节pass

        d:  

            0000 0010

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值