【C语言进阶】①探究数据在内存中的储存

本文介绍了C语言中的数据类型,包括char、short、int、long、float、double和指针等,并详细阐述了数据在内存中的存储形式,如原码、反码、补码的概念以及大端和小端模式。同时,重点讨论了整型提升的过程和实例,解释了在计算中如何将char和short类型提升为int类型进行运算。通过对整型提升的分析,揭示了这一过程在CPU运算中的必要性。
摘要由CSDN通过智能技术生成

一、知识回顾
1.数据类型
  • char -字符型 //在内存中占一个字节

  • short -短整型 //在内存中占两个字节

  • int -整型 //在内存中占四个字节

  • long -长整型 //在内存中占四个字节

  • float -单精度浮点型 //在内存中占 四个字节

  • double -双精度浮点型 //在内存中占八个字节

  • int* p -指针类型 //在32位操作系统占用4个字节,64位系统占用8字节

  • 其他:

  • 数组类型: int arr[10] //所占内存大小等于数组大小*类型

  • 结构体类型 struct : 所占内存大小等于所有成员变量所占空间大小,但考虑对齐方式时,结构体变量不是所有成员变量所占空间大小之和,牵涉到整型提升。

  • 枚举类型 enum : 有符号,根据其类型分配内存大小

  • 联合类型 union: 所占存储空间大小取决于联合体中最大数据类型所占的空间的大小。

二、数据在内存中储存形式
1.原码、反码、补码的概念
  • 原码:数据转换成二进制的形式,最高位为符号位
  • 反码:原码符号位不变,其他位按位取反
  • 补码:反码+1
    注意
    (1)正数,原、反、补都相同
    (2)补码符号位不变,其他位按位取反,然后+1得到原码
    (3)计算机系统中,所有的数值都是以补码的形式存储的
2.大端和小端模式介绍
  • 大端模式:指数据低位保存在内存的高地址中,数据的高位保存在低地址中
  • 小端模式:指数据低位保存在内存低地址中,数据高位保存在内存高位中

举个例子:

int a =(数据高位)0x11223344(数据低位);
假设内存中从左到右地址由低到高:
那么变量a在内存中的储存形式为:

  • 大端:(地址低位)11223344(地址高位)
  • 小端:(地址低位)44223311(地址高位)
三、整型提升
1.整型提升的概念:

C语言中,算术运算总是把表达式中字符类型(char)和短整型(short)操作数转换成普通整型(int),这种转换称为整型提升。

举个例子:

char a=1;char b=2;char c;
c = b+a;

这时a在内存的形式为00000001,b为00000010

  • 运算前,b和c的值在内存中存储形式都要转换成int类型,即32位bit。
  • a运算前在内存中整型提升为:
    0000 0000 0000 0000 0000 0000 0000 0001
  • b运算前在内存中整型提升为:
    0000 0000 0000 0000 0000 0000 0000 0010
  • 然后a和b进行相加得:
    0000 0000 0000 0000 0000 0000 0000 0011
    因为c为char类型,只占一个字节即8个bit位所以
  • c为:0000 0011 即等于3

而上面的例子, a 和 b都为有符号数的正整数
当char a =-1时,整型提升的方式不相同:
举个例子:

char a = -1;char b=2;char c;
c= a+b;
  • a的二进制(补码形式存储在内存中)为:
    1111 1111
  • 运算前整型提升为:
    11111111 11111111 11111111 111111111
  • a + b进行运行后的结果:
    0000 0000 0000 0000 0000 0000 0000 0001
  • c为char类型,只接收8个bit 位,其他为丢弃,c为0000 0001
  • c的值为1

总结

  1. 整型提升的意义:表达式的整型运算要在CPU的相应运算器中执行,CPU内整型运算器的操作数字节长度一般为int类型的字节长度,同时也是CPU的通用寄存器的长度,因此,两个char类型相加,在CPU中执行的实际是先把char类型整型提升为int类型的标准长度。
  2. 整型提升的方法
    (1)整型提升是按照变量的数据类型的符号位来提升的,即,负数的高位补1,正数高位补0
    (2)对于无符号数来说,高位一律补0
四、最后

关注我,接下来详细解析数据内存经典例题,保你学会!😃

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

白杨Cc

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

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

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

打赏作者

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

抵扣说明:

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

余额充值