【C语言】数据储存 — 数据类型 —— 类型转换!

本文详细介绍了C语言中数据的存储、数据类型以及类型转换。数据存储涉及bit、byte、数据对齐和大小端概念,类型转换包括了基本数据类型的转换和复合类型转换。此外,还讲解了C语言中的数据类型如整型、浮点型的细节,包括它们的表示方法、转换规则以及特殊类型如枚举和复合类型。文章最后讨论了类型转换,包括隐式转换和显式转换的规则。
摘要由CSDN通过智能技术生成

  程序说到底就是对数据的处理,所以首先要弄清楚需要处理哪些数据,计算机如何存储这些数据。C语言根据需要,抽象出了一些基本数据类型和衍生数据类型。这些可以满足大部分需求,更复杂的抽象数据类型亦可通过它们来组成。

1. 数据存储

       计算机存储的最小单位是bit,它表示0或1。而计算机可寻址的最小单位是byte,它至少由8个bit组成,内存就是由许多个byte组成并编址的。有OS时,C操作的是逻辑地址,OS会最终转为物理地址。

        一个数据由多个bit组成,按照二进制的表示习惯,将最左侧的bit叫做MSB(Most Significant Bit),最右侧的bit叫做LSB(Least Significant Bit),这里的significant当然是指该bit表示的数量级。这些bit会划分到连续的byte中,存储时byte的顺序基于系统或平台。这又引出了大小端(Endian)的概念,LSB存储在高地址时叫Big Endian,否则叫Little Endian。但无论如何,该数据的地址都是指最低地址。而且进一步讲,数组和结构成员的地址也是按它们的指数或定义顺序向高地址增长的,即使在栈里也不例外(栈底一般在高地址,栈顶向低地址增长)。

       C提供了关键字sizeof获取数据或类型占用内存的大小,结果以byte为单位。sizeof后如果跟括号,里面可以是类型或表达式,否则后面只能跟表达式。sizeof是运算符而不是函数,它的结果在编译时确定。如果操作对象是表达式,则返回其对应类型的大小,而不会执行表达式。

       计算机处理数据的单位叫word,我们一般说的32位64位计算机就是指word。为了提高处理效率,数据尽量不要或少跨word存储。这就需要数据的存储地址是数据长度的整数倍,和类型长度一样,对齐的单位一般是2的幂。基本类型对齐单位是其类型长度,组合类型(数组、结构、联合)的对齐单位是其成员的最大对齐单位。由于默认对齐的存在,组合类型的成员之间可能有一些空隙,sizeof的结果可能不是简单的累加了。但要注意,组合类型的成员总是尽量向低地址靠齐,所以组合类型的开头是不会有空隙的。

        新规范中引入了关键字_Alignof_Alignas(同sizeof一样不是函数),新引入的关键字一般以'_'和大写字母开头(为了不和编译器的扩展或用户自定义冲突),如果想用小写字母开头的,需要include对应的标准库(宏定义)。_Alignof后跟类型,得到类型的对齐单位。_Alignas后跟类型或整数常量,用来修饰类型或变量定义,但它不能小于其原有的对齐单位。

       C中数据一般叫对象(object),不同的数据会有不同的类型(type)。类型决定了数据的长度和格式,除此之外的类型属性(比如const)只有编译器能看到,而对计算机是透明的。C定义了char、int、float、double四种基本型,还有两个特殊类型void和枚举,以及它们的衍生(derived)类型(指针、数组、结构、联合、函数)。基本型和枚举并称为代数型(arithmetic),代数型和指针并称为度量型(scalar),数组和结构并称为聚合型(aggregate)。整型(interger)包括char、int和枚举,浮点型包括float和double,整型和浮点型并称实数型(real)。新规范中还定义了可选关键字_Bool、_Complex和_Imaginary

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值