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博客,我搬到这边啦!那边也都是基础易懂的。

 

相关文章
|
24天前
|
存储 程序员 编译器
C 语言中的数据类型转换:连接不同数据世界的桥梁
C语言中的数据类型转换是程序设计中不可或缺的一部分,它如同连接不同数据世界的桥梁,使得不同类型的变量之间能够互相传递和转换,确保了程序的灵活性与兼容性。通过强制类型转换或自动类型转换,C语言允许开发者在保证数据完整性的前提下,实现复杂的数据处理逻辑。
|
23天前
|
存储 编译器 C语言
【C语言】数据类型全解析:编程效率提升的秘诀
在C语言中,合理选择和使用数据类型是编程的关键。通过深入理解基本数据类型和派生数据类型,掌握类型限定符和扩展技巧,可以编写出高效、稳定、可维护的代码。无论是在普通应用还是嵌入式系统中,数据类型的合理使用都能显著提升程序的性能和可靠性。
41 8
|
3月前
|
存储 编译器 C语言
C语言存储类详解
在 C 语言中,存储类定义了变量的生命周期、作用域和可见性。主要包括:`auto`(默认存储类,块级作用域),`register`(建议存储在寄存器中,作用域同 `auto`,不可取地址),`static`(生命周期贯穿整个程序,局部静态变量在函数间保持值,全局静态变量限于本文件),`extern`(声明变量在其他文件中定义,允许跨文件访问)。此外,`typedef` 用于定义新数据类型名称,提升代码可读性。 示例代码展示了不同存储类变量的使用方式,通过两次调用 `function()` 函数,观察静态变量 `b` 的变化。合理选择存储类可以优化程序性能和内存使用。
168 82
|
2月前
|
存储 C语言
【c语言】数据类型和变量
本文介绍了C语言中的数据类型和变量。数据类型分为内置类型和自定义类型,内置类型包括字符型、整型、浮点型等,每种类型有不同的内存大小和取值范围。变量分为全局变量和局部变量,它们在内存中的存储位置也有所不同,分别位于静态区和栈区。通过示例代码和图解,详细阐述了这些概念及其应用。
57 1
|
2月前
|
C语言
3.4 C语言基本数据类型2
在C语言中,声明一个整型(int)变量时,需先写入'int'关键字,后跟变量名并以分号结尾。若同时声明多个变量,可在'int'后用逗号分隔列出所有变量名。例如,`int erns;` 或 `int hogs, cows, goats;` 都是合法声明。变量声明后需通过赋值语句如 `cows = 112;` 或使用函数如 `scanf()` 来初始化其值。
51 10
|
2月前
|
存储 程序员 C语言
3.1 C语言基本数据类型
在C语言中,整数类型如`int`类型是很有用的,它属于有符号整型,意味着该类型的值必须是整数,并且可以是正整数、负整数或者零。`int`类型的数值范围依据计算机系统有所不同,通常取决于系统的位宽。例如,在早期16位的IBM PC兼容机上,`int`类型使用16位存储,取值范围为-32768至32767;而在当前32位系统中,使用32位存储,拥有更宽泛的取值范围。随着64位处理器的普及,`int`类型能够存储的整数范围将进一步扩大。根据ISO C标准,`int`类型的最小取值范围被规定为-32768到32767。系统通常会利用一个特殊的位来表示整数的正负。
51 10
|
2月前
|
C语言
3.1C语言基本数据类型
在C语言中,初始化变量是指为变量设定初始值,通常在声明时直接完成,例如 `int cows=32;`。应注意避免在同一语句中混合初始化与未初始化的变量,如 `int dogs, cats=94;` 这样的写法容易引起误解。此外,整型常量如21、32等在C语言中被视为int类型,但非常大的整数则不然,且带有小数点或指数的数值不属于整型常量。
38 9
|
2月前
|
存储 C语言
C语言中的浮点数存储:深入探讨
C语言中的浮点数存储:深入探讨
|
2月前
|
存储 C语言
深入C语言内存:数据在内存中的存储
深入C语言内存:数据在内存中的存储
|
2月前
|
存储 C语言
初识C语言:常量与变量中寻找数据类型
初识C语言:常量与变量中寻找数据类型