C语言数据类型存储

简介: C语言数据类型存储

各种数据类型的存储:


1.字符在内存中存储

 字符数据是以ASCII码值再转化成二进制存在内存中的。ASCII码值是美国国家标准局为128个字符编号的十进制值(现在只有127个,还剩一个值(127)未表示字符),因为计算机只能存放和识别二进制,所以ASCII码值还是被转成二进制存到内存中,一个字符是8个bit位,一个二进制占一个bit位,在往出取内容的时候,是以字符数据类型看待内存中的二进制的。



  网上对ASCII码值讲得有些杂乱,这里我收集了一下得出这个信息,字符编号用一个字节的大小来编号,除去最高位第八位,因为它是一个符号位,0、1只表示正负,实际上就只有7位有效数,每一位都可以有两种选择0或1,所以有128种组合,从00000000-01111111 也就是0-127。



2.整型在内存中的存储

 整型在内存中存储的是补码。什么是原码、反码和补码?原码就是根据字面值,转成二进制就是原码。反码是原码按位取反得到的,补码是反码加一得到的。例:求-1的补码



一个整型4个字节


原码:-1嘛,最高位1表示是负数所以就成了如图所示


反码:符号位不变,其它位按位取反,0变1、1变0。


补码:反码加1。


所以-1的补码是全1,内存中存的就是全1。取出来的时候把补码倒着求原码就是存储的整型。


需要注意的是,(unsigned int)无符号整型、正数的原反补相同。


3.数组元素的内存空间分布

 数组是相同数据类型的元素的集合,可以创建一个连续的大的空间。



 我们可以看到第一个元素的地址是00,第二个是04,依次增加4,因为每个元素是整型,占四个字节的空间,第一个元素占内存编号0123,第二个元素占4567,不难看出是连续存放的。这个数组占的空间大小是int[10],占40个字节空间大小,变量sz是数组元素个数,我们自己清点一下就是10个元素,可千万不能写成int[sz],[]里只能放整型常量表达式。一个内存单位,也就是一个编号的空间大小是一个字节。


4.浮点型在内存中的存储

 浮点数在有些书上也被叫做实数,都可以,了解一下按照自己的习惯叫就ok。浮点数在内存中的存取区别于整型。在这里我只讲怎么个存法,看懂了你也就理解啦。



  可能解释看得有点难受,sorry!那么5.5存在内存中就是这样的:



 这是单精度浮点型的,与双精度浮点型不同的在空间分布和中间值的大小。double占8个字节,S还是占1个bit位,E占11个bit位,M占52个bit位,中间值是1023((0-2047)/2取商),其它都一样。但这就完了吗,不不不,还有一个细节。



 在内存中是以16进制显示的,四个比特位对应一个16进制位。


0100 0000 1011 0000 0000 0000 0000 0000


  4        0      b       0       0        0       0       0   -----所以就是40b00000。两个十六进制位是一个字节,因为一个十六进制位是4个bit位,8个bit位一个字节。再观察,90到94在内存中有分高地址和低地址的,从左到右地址增加,二进制位有低位和高位的,例如:0001,1是低位。


5.大小端字节序存储

 接上篇,在内存中存的不是40b00000而是0000b040,这是因为还存在大小端字节序的问题,为什么存在大小端?当我们把数据存储到内存中的时候,是不是有朝一日要拿出来用,那我们就得记得我们当时是如何放进内存中的,取的时候按顺序取出来才不会把数字给改了。


 大端字节序存储(顺序):低位数字放高地址,高位数字放低地址。



 小端字节序存储(逆序):低位数字放低地址,高位数字放高地址。



  强调字节序,是字节序,记住是字节序,40是一个字节,b0是一个字节,放的时候从左向右两位一个字节。


 大小端字节序在整型存储中也存在。而字符的话,字符就直接放了,因为字符只有一个字节大小。


好啦,讲到这里,我们把所有的在内存中的存储都讲完啦。

感谢你的阅读,你的点赞和关注我持续更新的动力,我是大一小白,点点关注不迷路。

这是我的51CTO博客,我搬到这边啦!那边也都是基础易懂的。

 

相关文章
|
1月前
|
存储 编译器 C语言
C语言存储类详解
在 C 语言中,存储类定义了变量的生命周期、作用域和可见性。主要包括:`auto`(默认存储类,块级作用域),`register`(建议存储在寄存器中,作用域同 `auto`,不可取地址),`static`(生命周期贯穿整个程序,局部静态变量在函数间保持值,全局静态变量限于本文件),`extern`(声明变量在其他文件中定义,允许跨文件访问)。此外,`typedef` 用于定义新数据类型名称,提升代码可读性。 示例代码展示了不同存储类变量的使用方式,通过两次调用 `function()` 函数,观察静态变量 `b` 的变化。合理选择存储类可以优化程序性能和内存使用。
148 82
|
2天前
|
存储 C语言
【c语言】数据类型和变量
本文介绍了C语言中的数据类型和变量。数据类型分为内置类型和自定义类型,内置类型包括字符型、整型、浮点型等,每种类型有不同的内存大小和取值范围。变量分为全局变量和局部变量,它们在内存中的存储位置也有所不同,分别位于静态区和栈区。通过示例代码和图解,详细阐述了这些概念及其应用。
21 1
|
24天前
|
C语言
3.4 C语言基本数据类型2
在C语言中,声明一个整型(int)变量时,需先写入'int'关键字,后跟变量名并以分号结尾。若同时声明多个变量,可在'int'后用逗号分隔列出所有变量名。例如,`int erns;` 或 `int hogs, cows, goats;` 都是合法声明。变量声明后需通过赋值语句如 `cows = 112;` 或使用函数如 `scanf()` 来初始化其值。
40 10
|
24天前
|
存储 程序员 C语言
3.1 C语言基本数据类型
在C语言中,整数类型如`int`类型是很有用的,它属于有符号整型,意味着该类型的值必须是整数,并且可以是正整数、负整数或者零。`int`类型的数值范围依据计算机系统有所不同,通常取决于系统的位宽。例如,在早期16位的IBM PC兼容机上,`int`类型使用16位存储,取值范围为-32768至32767;而在当前32位系统中,使用32位存储,拥有更宽泛的取值范围。随着64位处理器的普及,`int`类型能够存储的整数范围将进一步扩大。根据ISO C标准,`int`类型的最小取值范围被规定为-32768到32767。系统通常会利用一个特殊的位来表示整数的正负。
29 10
|
24天前
|
C语言
3.1C语言基本数据类型
在C语言中,初始化变量是指为变量设定初始值,通常在声明时直接完成,例如 `int cows=32;`。应注意避免在同一语句中混合初始化与未初始化的变量,如 `int dogs, cats=94;` 这样的写法容易引起误解。此外,整型常量如21、32等在C语言中被视为int类型,但非常大的整数则不然,且带有小数点或指数的数值不属于整型常量。
24 9
|
11天前
|
存储 C语言
深入C语言内存:数据在内存中的存储
深入C语言内存:数据在内存中的存储
|
12天前
|
存储 C语言
初识C语言:常量与变量中寻找数据类型
初识C语言:常量与变量中寻找数据类型
|
1月前
|
存储 C语言 索引
C 语言数据类型详解
C语言中的数据类型主要包括基本数据类型、构造数据类型和用户定义数据类型。基本类型如整型(`int`)、字符型(`char`)、浮点型(`float`)、双精度浮点型(`double`)和无符号整型(`unsigned int`)。构造类型包括数组(`Array`)、结构体(`Struct`)、共用体(`Union`)和枚举(`Enum`)。用户定义类型则通过`typedef`为已有类型定义新名称,并可通过结构体和共用体自定义复合数据结构。此外,还有指针类型用于存储变量地址,以及`signed`、`unsigned`、`short`、`long`等类型修饰符。
69 11
|
1月前
|
存储 C语言
【C语言基础考研向】02 数据类型-常量-变量
本文介绍了编程中的基本概念,包括数据类型分类、常量与变量的定义及使用。首先概述了四大类数据类型:基本类型(整型、浮点、字符型)、构造类型(数组、结构体)、指针类型和空类型。接着阐述了常量与变量的区别及命名规则,并详细说明了整型、浮点型和字符型数据的特点与应用。最后总结了常见的易错点,如字符串与字符常量的区别及浮点数的默认输出格式。
|
1月前
|
存储 人工智能 C语言
数据结构基础详解(C语言): 栈的括号匹配(实战)与栈的表达式求值&&特殊矩阵的压缩存储
本文首先介绍了栈的应用之一——括号匹配,利用栈的特性实现左右括号的匹配检测。接着详细描述了南京理工大学的一道编程题,要求判断输入字符串中的括号是否正确匹配,并给出了完整的代码示例。此外,还探讨了栈在表达式求值中的应用,包括中缀、后缀和前缀表达式的转换与计算方法。最后,文章介绍了矩阵的压缩存储技术,涵盖对称矩阵、三角矩阵及稀疏矩阵的不同压缩存储策略,提高存储效率。
222 8