C语言数据存储 — 整型篇

C语言——整型数据在内存中的存储 整型数据的存储,整型提升的一些应用场景, 阅读详情

前言

在C语言中,了解相关数据存储对一名优秀程序员来说是至关重要的!通过相关原理,从而更加深入地理解计算机如何存储和操作数据,这对于编程人员来说是非常重要的。只有深入理解计算机存储和操作数据的原理,才能编写出更加高效、可靠的程序。本文将详细介绍C语言中整型数据是如何存储的,希望能帮助读者在编程路上更近一步!!

1. 数据类型介绍

C语言中,基本的内置类型和大小如下:
在这里插入图片描述
类型的意义:

  1. 使用这个类型开辟内存空间的大小(大小决定了使用范围)
  2. 如何看待内存空间的视角

1.1 类型的基本分类

整型家族:
在这里插入图片描述
浮点数家族:

float
double
(long double)

构造类型:


数组类型
结构体类型 struct
枚举类型 enum
联合类型 union

指针类型:

int *pi;
char *pc;
float *pf
void *pv;
……

空类型:

void 表示空类型(无类型)
通常应用于函数的返回类型、函数的参数、指针类型。

2. 整型在内存中的存储

一个变量的创建是要在内存上开辟空间的。而空间的大小是根据不同的类型而决定的。

接下来我们将介绍数据在所开辟的内存中是如何存储的!
比如:

int a = 20;
int b = -10;

我们知道a/b分别分配了4字节的空间,那如何存储?

在介绍之前,我们要先了解以下概念。

2.1 原码、反码、补码

计算机中的整数有三种2进制表示方法,即原码、反码和补码。
三种表示方法均有 符号位和 数值位两部分.符号位都是用0表示“正”,用1表示“负”。

  • 正数的原码、反码、补码都相等。
  • 负整数的三种表示方式各不相等。

负整数的三种表示方法:

原码:
直接将数值按照正负数的形式翻译成二进制的形式就可以得到原码。

补码:
将原码的符号位不变,其他位按位取反就得到反码。

补码:
反码+1就得到补码。

2.1.1 为什么数据存放在内存中存放的是补码

在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值位统一处理;
同时,加法和减法也可以统一处理(CPU只有加法器),此外,补码和原码相互转换,其运算过程是相同的,不需要额外的硬件电路。

例子:

在计算机中,数值一律用补码来表示和存储。原因在于,是用补码,可以将符号位和数值位统一处理
例如:结算1 + (-1)
 使用原码计算
00000000 00000000 00000000 00000001 --> 1的原码 
10000000 00000000 00000000 00000001 --> -1的原码 
10000000 00000000 00000000 00000020 --> 结果-2
原码计算错误

使用补码计算
 00000000 00000000 00000000 00000001 --> 1的补码
 11111111 11111111 11111111 11111111 --> -1的补码
100000000 00000000 00000000 00000000 -->结果0
补码计算正确

Tips:

  • 补码和原码相互转化运算过程是相同的。即原码符号位不变,其他位按位取反的到反码;反码+1得到补码。而由补码反推原码时,除了将上述过程力推,还可以补码符号位不变,其他位按位取反后在+1即可得到原码。

我们再来看看内存中的存储(以vs为例):
在这里插入图片描述
我们可以看到对于a存放在内存中的补码,我们发现顺序有点不对劲!
这是为什么呢?
这就不得不提到大小端了。

2.2 大小端介绍

2.2.1 什么是大小端?

大端(存储)模式又称大端字节序存储:数据的低位字节中的数据存放在高地址处,高位字节中的数据存放在低地址处。
小端(存储)模式又称小端字节序存储:数据的低位字节中的数据存放在低地址处,高位字节中的数据存放在高地址处。

Tips:

  • 字节序:以字节为单位,讨论内存的存储顺序。

2.2.2 为什么有大端和小端?

为什么会有大小端模式之分呢?
这是因为在计算机系统中,我们是以字节为单位的,每一个地址单元对应一个字节,一字节为8bit.但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(具体要看编译器)等。另外,对于位数大于8位的处理器,例如16位或32位的处理器 ,由于寄存器宽度大于一个字节,那么必然存在着一个如何将多个字节安排的问1题。因此就导致了大端存储模式和小端存储模式!

例如:

一个16bit的short型x, 在内存中的地址为0x0010,x的值为0x1122。那么0x11为高字节,0x22为低字节。
对于大端模式,就将0x11放在高地址处,即0x0011中;而0x22放在低地址中,即0x0011中。小端模式,刚好相反。

  • 我们常用的x86和x64结构是小端模式,而KEIL C51则是大端模式。很多的ARM, DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。

2.2.3 一道百度系统工程师笔试题

请简要介绍大端字节序和小端字节序的概念,设计一个小程序来判断当前机器的字节序。(10分)

相关概念读者自行查看2.2.1。

下面来分析如何设计小程序来判断数据存储模式。

如下图所示,我们可以用数字1即可解决问题。
我们发现如果是小端模式,第一个字节中存放的数据为1;如果是大端模式,第一个字节中存放的数据为0。
接下来问题转化为:如何让编译器只访问一个字节空间呢?
其实很简单,我们只需要将a的指针强制类型转换为char*,在解引用访问即可。

代码实现:

//代码1
判断当前机器的自己序
int check_sys()
{
	int a = 1;
	char* ret = (char*)&a;
	if (*ret == 1)
		return 1;
	else
		return 0;
}

int main()
{
	int ret = check_sys();
	if (ret == 1)
		printf("小端\n");
	else
		printf("大端\n");
	return 0;
}

//代码2,简化代码1
int check_sys()
{
	int a = 1;
	//大端返回0,小端返回1
	return *(char*)&a;
}
int main()
{
	int ret = check_sys();
	if (ret == 1)
		printf("小端\n");
	else
		printf("大端\n");
	return 0;
}

3. 结尾

本篇文章到此就结束了。接下来在C语言数据存储 — 浮点数篇中将详细介绍浮点数相关知识,敬请期待。如果对您有帮助,记得三连哦!感谢您的支持!!

C语言重要知识点总结【8】:C语言中变量的数据类型 ①整型数据 ②字符型数据 ③浮点型数据 阅读详情

相关推荐

C语言中的signed和unsigned的使用以及整型提升一探究竟

在C语言中,signed表示有符号的,是默认的,可以输出整数、负数 unsigned是无符号的,不能表示数值的征服 在整型提升的时候,如两个char型的字符相加(char型是一个字节),而计算机内部的操作数的字符长度一般为int型即四个字节。因此我们没有办法直接将两个char型的字符进行相加,就必须要进行整型提升。 输入如下代码会输出什么结果呢? #include<stdio.h> int main() { char a=-1; signed char b=-1; unsigned ch

qq_45219263的博客 4866

C语言基础(一)

基本数据类型

wehpd的博客 1742

从理论到实践:全面解析Cmk(设备能力指数)的应用与优化

本文全面解析了设备能力指数Cmk的核心概念、计算逻辑与关键应用场景。Cmk作为衡量设备本身固有加工能力的黄金标准,在设备验收、大修后验证及过程能力根因分析中至关重要。文章通过实战案例,详细阐述了执行Cmk测试的“五大固定”黄金法则、数据计算分析方法,并提供了Cmk不达标时的系统性排查与优化策略,帮助制造企业实现预防性质量管理。

jump7的博客 523

数据类型-整型(C语言)

目录 1 整型的表现形式和存储形式 1.1整型分类 1.1扩展类型 1.3整数的表现形式 1.4整数的存储形式 2 各种进制及其转换 2.1进制判断依据 2.2十进制- - >二进制 2.3八进制 2.4十六进制 3各整型类型及所占字节数 3.1位和字节 3.2 字节数的影响因素 3.3各类型所占字节数 3.4各类型所占字节数 4 综合案例 4.1各整型输出控制符 4.2案例 1 整型的表现形式和存储形式 1.1整型分类 包括:...

weixin_46039719的博客 7974

【AI测试必学】DeepSeek API 快速入门:获取 API Key 与调用 API 步骤详解

DeepSeek API 使用与 OpenAI 兼容的格式,可以通过修改配置使用 OpenAI SDK。生成的 API Key 只会显示一次,请妥善保存。注册并登录账号,进入左侧导航栏的。创建 API Key。

blues_C的博客 1万+

RK3588 hdmirx 调试(含v4l2工具,edid编辑)

RK3588 Buildroot系统中调试HDMI-RX的过程,包括抓图、修改EDID数据、编辑EDID等操作。首先,通过logcat和寄存器信息查询HDMI-RX的状态,使用v4l2-ctl工具进行测试和修改EDID。

501846585_QQAndroid_java 2684

C语言(二)— 整型

编程进阶— C语言(一)— 变量和数据类型 整型 在C语言中,整型数据一般用short、int、long三种数据类型来声明,int是C语言中常用的声明整形数据的数据类型,在现代的操作系统中,一般是占4字节(Byte)即32位(Bit),4字节可以存储很大的数值,为了节省空间,避免造成不必要的浪费,对于较小的数据,可以用short int来声明,也可以省略int;对于太大的数据,可以用long int来声明,也可以省略int。 int 是基本的整数类型,short 和 long 是在 int 的基础上进行的扩

qq_44715649的博客 8761

21、使用 FastHenry 进行片上电感器的模拟与参数预测

本文介绍了使用 FastHenry 对片上电感器进行模拟和参数预测的方法。讨论了 FastHenry 的适用场景、线圈几何形状的选择与离散化方法,以及如何考虑模拟中的寄生效应。同时对比了 FastHenry 和 Magnet 在不同基板电阻率下的模拟精度,并提出了优化电感器设计的策略,为高效准确地预测电感参数提供了技术指导。

y9z0a1b的博客 293

C语言整型知识

初入C语言,有理解错误或不正确请多指教、纠正! C语言整型int是英文integer的缩写,int分为有符号(signed)和无符号(unsigned)整型。 C语言整型有如下: 一、有符号 1、signed char 可简化为 char 2、signed short int 可简化为short 3、signed int 可简化为 int 4、signed long int 可简化为 long 5、signed long long int 可简化为 long long 二、无符号 uns.

sgbl888的博客 9082

【推荐100个unity插件】实现逼真的雪与雨系统——Weatherade: Snow and Rain System

Weatherade是一款Unity雪天/雨天场景创建系统,支持内置RP和URP渲染管线,提供雪/雨覆盖着色器、地形支持、雪痕效果等特性。安装后需配置URP渲染器,通过添加覆盖实例和转换材质实现效果,支持手动调整或批量转换工具快速应用。系统包含完整演示场景,可通过官方文档了解更多配置细节。下载地址:Unity Asset Store或百度网盘学习版。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1221

PyQt 随笔:信号与槽的两种使用方法:@pyqtSlot 和 connect

在 PyQt 中,信号与槽是实现事件驱动的一种重要机制。通过信号与槽的连接,可以实现对象之间的通信,例如在用户界面中响应按钮点击事件或者数据的变化等。PyQt 提供了两种主要的方法来创建信号与槽的连接:@pyqtSlot 装饰器和 connect 方法。本文将详细介绍这两种方法,并提供相应的源代码示例。在上面的示例中,我们定义了一个名为。

QasdCpp的博客 763

C语言数据类型(仔细讲解版)

long long int (可简写成 long long ):长长整型,通常占用8个字节(64位)存储空间,能表示的范围非常大,是 -9223372036854775808 到 9223372036854775807 (即 -2^63 到 2^63 - 1 )。- int :是最常用的整型类型,在大多数现代计算机系统中,它通常占用4个字节(32位)的存储空间,能表示的范围是: -2147483648 到 2147483647 (即 -2^31 到 2^31 - 1 )。

2401_88186301的博客 2674

mabl:AI原生测试自动化平台的基础使用

mabl是一个基于人工智能和机器学习的云原生测试自动化平台。它通过使用先进的技术,如机器学习,自动创建和执行测试,自动分析测试结果,并根据需求的变化自动适配和维护测试。这样的自动化过程极大地提高了软件测试的效率和准确性。mabl的口号是 “You write code, mabl tests”,意味着开发者只需关注编写代码,而测试工作则可以交给mabl来完成。mabl的平台支持多种测试类型,包括 Web、App、Api、可访问性和性能测试,使得团队能够更快速、更有信心地发布软件。

blues_C的博客 3657

C语言数据存储——整型篇

char(unsigned char 和 signed char),char指的是signed char。(1)在计算机系统中,整数数值一律用补码来表示和存储。大小端(大端字节序/小端字节序),补码在内存中具体是大端字节序存储还是小端字节序存储,取决于编译器。),此外,补码与原码相互转换,其运算过程是相同的(见图1),不需要额外的硬件电路。图2 0x11223344分别以大端字节序存储和小端字节序存储情况。(2)设计程序判断当前机器是大端字节序还是小端字节序(见图3)内存中整数以补码的形式存储的。

weixin_45102403的博客 112

点云处理实操(四) -PCL中的点云三角化

点云处理实操(四) -PCL中的点云三角化

cangqiongxiaoye的博客 939

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【C语言】数据存储篇,内存中的数据存储----C语言整型,浮点数的数据在内存中的存储以及大小端字节序【图文详解】

C语言中整型的存储是原码反码补码,那么浮点数的存储又是什么样的呢?本篇将以整型的数据存储开始,带大家了解C语言中浮点数据的存储。

cilmy23的note 1565

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

c语言四字节转浮点数_2020.5.3自学C语言第三天

2020.5.3学习书目:《C语言从入门到项目实战(全程视频版)》一天争取搞20页。13-32-47写这段话的时候已经是4号凌晨1点了。晚上7点开始搞,一天并不是精力都在这个上面。先总结一下今天这个学习情况和问题:1、表变多了,我把word当做自己的学习笔记,敲键盘能让自己不那么容易犯困,但是感觉自己没抓住学习的重点。虽然是边敲键盘边思考,但花在敲键盘上的时间有点多。2、这个阶段代码一定要自己敲的...

weixin_39724441的博客 609

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

C语言学习第三章——顺序程序设计

转义字符 常量分类: (1)字面常量(直接常量):数值常量(分为整型常量和浮点型常量),字符串常量和字符常量 #include<stdio.h> int main(void){ //1.整型常量 printf("%d\n",234); //2.浮点型常量 printf("%lf,%lf\n",3.24,3e-2); //3e-2 代表3的10的-2次方 //3.字符串常量 printf("%s","%dabc\n"); //字符串使用的是格式说明符为%s,输出:%dabc p

shi_jiaye的博客 1311

打卡学习第一天

目录C语言基础知识复习数据存储整型:浮点型:C常量: C语言基础知识复习 今天是第一天打卡,先复习了一下C基本语法,有写了一遍hello,world.我记得第一次接触hello,world的c++社团,那个时候我的水平是真的奇差,大学正式开始学习C了反而没有写过hello,world. 重温一下吧! ​​ 今天的课程里列了很多关键字,我还是喜欢在代码里学习它们,这里就不多加赘述了。 数据存储 我记得蓝桥杯的介绍贴里考过数据存储,但我以前好像是没有关注过呢,这里就贴出来,当作是以后的复习贴吧 然后呢今天又g

m0_61481979的博客 372

C语言计算机二级选择题重点,2014年计算机二级C语言重点选择题笔试复习资料.doc...

2014年计算机二级C语言重点选择题笔试复习资料PAGE26 / NUMPAGES26C 语言最重要的知识点复习资料第一章C语言基本知识【考点1】C程序C语言程序结构有三种: 顺序结构 , 循环结构(三个循环结构), 选择结构(if 和 switch)【考点2】main函数每个 C 语言程序中main 函数是有且只有一个。读程序都要从main()入口, 然后从最上面顺序往下读(碰到循环做循环,碰到...

weixin_33314040的博客 184

C语言——数据存储

整型数据是以二进制补码形式在内存中存储的。

Stewie Lee的博客 2932

【C语言】整型数据在内存中的存储(详解)

文章目录数据类型布尔类型无符号数据的打印不同数据占用的字节整型在内存中的存储整型家族“原反补”三兄弟二进制要怎么写出来呢?什么是符号位?大小端问题判断当前编译器是大端还是小端为什么整型在内存中存放的是补码呢?结语 数据类型 我们知道,C语言中有很多不同的数据类型 在cppreference.com网站上可以找到C语言中的不同类型【链接】 先来认识一个不那么常见的类型 布尔类型 C99中引入了布尔类型 _Bool 实质:把1和0变成ture和false #include<stdbool.h>

慕雪华年的博客 5065

看完这五个问题后你真的了解C语言吗?(深度剖析C语言第二期)

C语言是一门非常经典的语言,远没有我们在学校学的那几个语法而已,让小生再来带大家重新认识一遍C语言吧🥳🥳🥳

qq_59955115的博客 3万+

【落羽的落羽 C语言篇】数据存储简介

但%u说明这是一个无符号整数,最高位的1也要计算,最后这个32个二进制位换算成十进制就是42亿多的一个数。如果之后的整数运算用到了变量a,就要先对a进行整型提升,11111111的符号位是1,高位补充1,结果是11111111 11111111 11111111 11111111(补码),即十进制数-1。如果之后的整数运算用到了变量b,就要先对b进行整型提升,00000001的符号位是0,高位补充0,结果是00000000 00000000 00000000 00000001(补码),即十进制数1。

记录我一步步的学习历程,期待无限进步,向星举目! 1267

截断&&整型提升&&算数转换

大家好啊!这里阿辉补一下前面操作符遗漏的地方——截断、整型提升和算数转换看这一篇要先会前面阿辉讲的数据的存储否则可能看不懂不bb了,铁子们开始今天的学习吧!!!

m0_75108739的博客 3606

C语言——内存中数据存储的详解(整型与浮点型)

char //字符类型 short //短整型 int //整型 long //长整型 long long //更长的长整型 float //单精度浮点型 double //双精度浮点型补充:long在当前VS2019的x86环境下为4个字节,而在当前VS2019的x64的环境下是8个字节。数据类型存在的意义:数据类型决定了该类型定义变量时,变量的取值范围大小(所占内存的空间大小,单位是字节)。以上就是我对整型数据和浮点型数据在内存中存储的全部总结。

sinzz的博客 1419
上一篇: C语言结构体
下一篇: 编程最重要的技术之一 — 调试(以C语言代码为例)
小白debug~
小白debug~ 新星创作者: C/C++技术领域 新星创作者: C/C++技术领域
博客等级 码龄4年 3510粉丝 128原创
评论 24
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

小白debug~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值