C语言 “整型在内存的存储,大小端存储模式的介绍“

简介: C语言 “整型在内存的存储,大小端存储模式的介绍“

一、数据类型介绍

1、C语言当中的数据类型以及字节大小

2、类型的基本归类

       (1)整型家族:

                       

       (2)浮点型家族:

                       

       (3)构造类型:

                       

       (4)指针类型:

                       

       (5)void空类型:通常用于函数的返回类型,函数的参数,指针类型。


二、整型在内存中的存储方式

我们知道整型在内存中被分配了4个字节

创建两个整型变量a,b:

                               

我们可以用调试的方式看它的内存存储方式

a的值是10,在内存中存储的形式如上图0a 00 00 00,而vs为了方便观察,展示出来的是16进制的数字,a就是10,很好的给我们反馈出来了,而他把字节序小的位数放在了低地址处,这其实就是小端字节的排序方式

在讲负数在内存中的存储方式之前我们先介绍原码,反码,补码

       原码,反码,补码:

       正数的原码,反码,补码相同。(整型的二进制)

       负数的原码,反码,补码的关系:

               原码:把10进制或其他进制的数转换成2进制

               反码:原码除符号位(第一位)不变,其他全部按位取反

               补码:反码加一

(补充:补码转换成原码可以先减一再按位取反,也可以先按位取反再加一,和原码转换成补码一样。

所有整数在内存中存储是以补码的形式存储的。

-10在内存的存储形式是f6 ff ff ff

我们可以使用计算机算出-1016进制

可以看到,和上面内存中存储的16进制相同

如果我们想计算出a+b的值呢,如果直接用a和b的原码计算,是计算不出来的,因为b是负数,负数的符号位是1,其实计算机的cpu只有加法运算,没有减法,要进行负数的运算,就得将其转化成补码,在将两个的补码转换成原码算出来

我们先将-10的原码,反码,补码写出来

原码:1111111111111111111111111111111111111111111111111111111111110110

反码:10000000000000000000000000000000000000000000000000001001

补码:10000000000000000000000000000000000000000000000000001010

a+b的补码计算过程

       a:00000000000000000000000000000000000000000000000000001010

       b:10000000000000000000000000000000000000000000000000001010

  a+b:100000000000000000000000000000000000000000000000000000000

再往二进制级次低位那个方向取32个比特位,去掉1,就是32个0,a+b的结果也就是0。


三、大小端存储模式的介绍及判断

       (1)介绍

       小端存储模式:指数据中字节位序小的数存储到低地址处,字节位序大的数存储到高地址处。

       大端存储模式:指数据中字节位序大的数存储到低地址处,字节位序小的数存储到搞地址处。

       (2)判断VS中内存的存储模式是大端还是小段,写一段代码,进行判断

       地址是由低到高的,我们令a = 500可以看到内存的存储方式是这样的,

       

500的十六进制是1f4

这里数据中的低字节位放在了低地址处

所以,在VS中内存的存储方式是小端存储方式。

(3)设计判断大小端字节序的代码:

原理:令一个整型变量i = 1,他在内存中存储方式有两种,也就是大端或小段

上面是小端

下面是大端

我们i是能访问4个字节的,就需要把他强制转换成char类型,让其访问1个字节,再对其解引用,若是1则是小端0则是大端

 

相关文章
|
23天前
|
存储 编译器 C语言
C语言存储类详解
在 C 语言中,存储类定义了变量的生命周期、作用域和可见性。主要包括:`auto`(默认存储类,块级作用域),`register`(建议存储在寄存器中,作用域同 `auto`,不可取地址),`static`(生命周期贯穿整个程序,局部静态变量在函数间保持值,全局静态变量限于本文件),`extern`(声明变量在其他文件中定义,允许跨文件访问)。此外,`typedef` 用于定义新数据类型名称,提升代码可读性。 示例代码展示了不同存储类变量的使用方式,通过两次调用 `function()` 函数,观察静态变量 `b` 的变化。合理选择存储类可以优化程序性能和内存使用。
139 82
|
23天前
|
存储 C语言
【C语言基础考研向】04整型进制转换
本文介绍了计算机中整型常量的不同进制表示,包括二进制、八进制、十六进制和十进制,并解释了它们之间的转换方法。以一个32位整型数为例,展示了其在不同进制下的表示形式及计算方法,特别指出在内存观察中常用十六进制,同时提到了小端存储方式对数据的影响。
|
24天前
|
存储 人工智能 C语言
数据结构基础详解(C语言): 栈的括号匹配(实战)与栈的表达式求值&&特殊矩阵的压缩存储
本文首先介绍了栈的应用之一——括号匹配,利用栈的特性实现左右括号的匹配检测。接着详细描述了南京理工大学的一道编程题,要求判断输入字符串中的括号是否正确匹配,并给出了完整的代码示例。此外,还探讨了栈在表达式求值中的应用,包括中缀、后缀和前缀表达式的转换与计算方法。最后,文章介绍了矩阵的压缩存储技术,涵盖对称矩阵、三角矩阵及稀疏矩阵的不同压缩存储策略,提高存储效率。
|
26天前
|
存储 算法 C语言
数据结构基础详解(C语言): 二叉树的遍历_线索二叉树_树的存储结构_树与森林详解
本文从二叉树遍历入手,详细介绍了先序、中序和后序遍历方法,并探讨了如何构建二叉树及线索二叉树的概念。接着,文章讲解了树和森林的存储结构,特别是如何将树与森林转换为二叉树形式,以便利用二叉树的遍历方法。最后,讨论了树和森林的遍历算法,包括先根、后根和层次遍历。通过这些内容,读者可以全面了解二叉树及其相关概念。
|
26天前
|
存储 机器学习/深度学习 C语言
数据结构基础详解(C语言): 树与二叉树的基本类型与存储结构详解
本文介绍了树和二叉树的基本概念及性质。树是由节点组成的层次结构,其中节点的度为其分支数量,树的度为树中最大节点度数。二叉树是一种特殊的树,其节点最多有两个子节点,具有多种性质,如叶子节点数与度为2的节点数之间的关系。此外,还介绍了二叉树的不同形态,包括满二叉树、完全二叉树、二叉排序树和平衡二叉树,并探讨了二叉树的顺序存储和链式存储结构。
|
26天前
|
存储 算法 C语言
C语言手撕数据结构代码_顺序表_静态存储_动态存储
本文介绍了基于静态和动态存储的顺序表操作实现,涵盖创建、删除、插入、合并、求交集与差集、逆置及循环移动等常见操作。通过详细的C语言代码示例,展示了如何高效地处理顺序表数据结构的各种问题。
|
1月前
|
缓存 Linux C语言
C语言 多进程编程(六)共享内存
本文介绍了Linux系统下的多进程通信机制——共享内存的使用方法。首先详细讲解了如何通过`shmget()`函数创建共享内存,并提供了示例代码。接着介绍了如何利用`shmctl()`函数删除共享内存。随后,文章解释了共享内存映射的概念及其实现方法,包括使用`shmat()`函数进行映射以及使用`shmdt()`函数解除映射,并给出了相应的示例代码。最后,展示了如何在共享内存中读写数据的具体操作流程。
|
1月前
|
存储 缓存 程序员
c语言的存储类型-存储类
本文详细介绍了C语言中的存储类型及其分类,包括基本类型(如整型、浮点型)和复合类型(如数组、结构体)。重点讲解了不同存储类别(`auto`、`static`、`register`、`extern`、`typedef`、`volatile`、`const`)的特点及应用场景,并展示了C11/C99引入的新关键字(如`_Alignas`、`_Atomic`等)。通过示例代码解释了每个存储类别的具体用法,帮助读者更好地理解和运用这些概念。
|
4月前
|
程序员 C语言 C++
【C语言基础】:动态内存管理(含经典笔试题分析)-2
【C语言基础】:动态内存管理(含经典笔试题分析)
|
4月前
|
程序员 编译器 C语言
【C语言基础】:动态内存管理(含经典笔试题分析)-1
【C语言基础】:动态内存管理(含经典笔试题分析)

热门文章

最新文章

下一篇
无影云桌面