struct函数 隐式类型转换(实例)

#define _CRT_SECURE_NO_WARNINGS 1 
#include<stdio.h>
//struct Name//struct 自定义函数
//{
//    char name[20];
//    char id[20];
//    char cord[20];
//};
//int main()
//{
//    struct Name b = { "家辉", "01.02", "家辉儿子" };
//    struct Name* pb = &b;
//    printf("名字:%s\n", (*pb).name);//(*结构体指针).name
//    printf("生日:%s\n", (*pb).id);  //用地址打印struct Name函数
//    printf("生日:%s\n", (*pb).cord);
//    printf("\n");//换行
//    //也可写成
//    printf("名字:%s\n", pb->name);   //结构体指针->成员名
//    printf("生日:%s\n", pb->id);
//    printf("生日:%s\n", pb->cord);
//    printf("\n");
//    //也可写成                       //结构体指针.成员名
//    printf("名字:%s\n", b.name);
//    printf("生日:%s\n", b.id);
//    printf("生日:%s\n", b.cord);
//    return 0;
//}

//隐式类型转换------需要整型提升(short,char型)变为(int型)(分为正数和负数),然后截断,并只留下最后八位
//正数,如char i=8; 为00001000---->00000000000000000000000000001000
//负数,如char i=-8;为10001000---->11111111111111111111111110001000
//无符号整型,高位补0;unsigned i=8;00001000---->00000000000000000000000000001000
//int main()
//{
//    char a = 3;  //00000000000000000000000000000011截断,变为00000011(int)
//    char b = 127;//00000000000000000000000001111111截断,变为01111111(int)
//    char c = a + b;//c为int型a,b相加:01111111+00000011=10000010(第一位为1,负数,所以变为二进制时其他位补1)
//    //10000010变为二进制11111111111111111111111110000010(计算机显示的是补码)
//    //            反码为11111111111111111111111110000001(补码-1)
//    //            原码为10000000000000000000000001111110(反码相反数),为-126
//    printf("%d\n", c);//打印结果为-126
//    return 0;
//}


//int main()
//{
//    char a = 0xb6;//char  short型,小于int型,转变后,不等于原来的值
//    short b = 0xb600;
//    int c = 0xb6000000;
//    if (a == 0xb6)
//    {
//        printf("a\n");
//    }
//    if (b == 0xb600)
//    {
//        printf("b\n");
//    }
//    if (c = 0xb6000000)
//    {
//        printf("c\n");
//    }
//    return 0;
//}

//int main()
//{
//    char a = 0xb6;//char  short型,小于int型,转变后,不等于原来的值
//    short b = 0xb600;
//    int c = 0xb6000000;
//    if (a == 0xb6)
//    {
//        printf("a\n");
//    }
//    if (b == 0xb600)
//    {
//        printf("b\n");
//    }
//    if (c = 0xb6000000)
//    {
//        printf("c\n");
//    }
//    return 0;
//}
int main()
{
    char c = 1;               //%u是打印有个unsigned的数
    printf("%u\n", sizeof(c));//打印结果为1
    printf("%u\n", sizeof(+c));//打印结果为4
    printf("%u\n", sizeof(-c));//打印结果为4
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力成为焦耳定律鸭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值