【C语言】 数据的存储 -- 数据类型介绍 -- 存储 -- 浮点型在内存中的存储,很详细也很重要,不明白的一定要看1

简介: 【C语言】 数据的存储 -- 数据类型介绍 -- 存储 -- 浮点型在内存中的存储,很详细也很重要,不明白的一定要看1

*************************************************正文开始*************************************************

1、数据类型介绍

前面我们已经学习了基本的内置类型(C语言已经有的类型叫做内置类型)
char         short         int         long         long long         float         double

以及他们所占存储空间的大小。

类型的意义:

       1.使用这个类型开辟内存空间的大小(大小决定了适用范围)。

       2.如何看待内存空间的视角。

1.1 类型的基本归类

整型家族:

char
  unsigned char
  signed char//char = signed char 是取决于编译器的
short
  unsigned short [int]//这里的int可以不写,下面一致 
  signed short[int]//short = signed short ,signed 可省略
int 
  unsigned int 
  signed int //int = signed int ,signed 可省略
long
  unsigned long [int]
  signed long [int]//long = signed long ,signed 可省略

注:


1.字符存储和表示的时候本质上使用的是ASCII码值,ASCII码值是整数,因此字符类型也归类到整型家族;


2.数值在分类的时候有正有负,因次就存在 unsigned(无符号,只有正),signed (有符号,可正可负),平时写的 int = signed int,signed可省略 。但是 char == signed char 是取决于编译器的(见到的编译器上大多是等于的)。


浮点型家族:

float
double

构造类型(自定义类型):

>数组类型  //int arr[5],char str[10]
>结构体类型 struct
>枚举类型 enum
>联合类型 union

指针类型:

int *pi;//+-1跳过几个字节看指针的类型,解引用访问几个字节也是看指针类型
char *pc;
float *pf;
void *pv;

空类型:

void 表示空类型(无类型)

通常应用于函数的返回类型、函数的参数、指针类型。

函数不希望有任何返回值就用 void ;函数的参数写成 void 代表了这个函数不需要参数;void* p 是无具体类型的指针。

2、整型在内存中的存储

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

那接下来我们他谈数据在所开辟的内存中到底是如何存储的?

比如:

int a = 20;
int b = -10;

我们知道为 a 分配四个字节的空间。

那如何存储?

下来了解下面的概念:

2.1 原码、反码、补码

计算机中的整数有三种2进制的表示方法,即原码、反码、补码。

三种表示方法均有符号位和数值位两部分,符号位都是用‘0’表示“正“,用‘1’表示”负“,而数值位只要把这个数字表示清楚就可以。
正数的原、反、补码都相同。

负整数的三种表示方法各不相同。

举例:

int main()
{
  int a = 20;
  //原码:00000000 00000000 00000000 00010100
  //反码:00000000 00000000 00000000 00010100
  //补码:00000000 00000000 00000000 00010100
  int b = -10;
  //原码:10000000 00000000 00000000 00001010
  //反码:11111111 11111111 11111111 11110101
  //补码:11111111 11111111 11111111 11110110
  return 0;
}


原码


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


反码


将原码的符号位不变,其他位一次按位取反就可以得到反码。


补码


反码+1就得到补码。


对于整型来说:数据存放内存中其实存放的是补码。


我们为了更加清楚,使用调试可以观察一下内存中如何存储:


正数的原反补码相同说明不了问题,我们来看负数的


这里是为了方便展示所以用的 16进制,在内存中就是以 2进制存储的。2进制数转换为 16进制数就是 ff ff ff f6。


Q:为什么数据存放内存中其实存放的是补码呢?


A:在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;


同时,加法和减法也可以统一处理(CPU只有加法器)此外,补码与原码相互交换,其运算过程是相同的,不需要额外的硬件电路。


这段话有点难理解,我们举例来说明一下:


我们以 1 - 1 来说。上面的话说 CPU 只有加法器,而我们这里却是用减法处理的,因此我们改写为 1+(-1),而CPU就是这样来做的。

int main()
{
  1 + 1;
  1 + (-1);
  //1的补码: 00000000 00000000 00000000 00000001
  //-1的原码:10000000 00000000 00000000 00000001
  //-1的反码:11111111 11111111 11111111 11111110
  //-1的补码:11111111 11111111 11111111 11111111
  //1+(-1)补码相加:1 00000000 00000000 00000000 00000000
  return 0;
}

分析:



这也说明了内存中存储的是补码。

相关文章
|
2月前
|
存储
阿里云轻量应用服务器收费标准价格表:200Mbps带宽、CPU内存及存储配置详解
阿里云香港轻量应用服务器,200Mbps带宽,免备案,支持多IP及国际线路,月租25元起,年付享8.5折优惠,适用于网站、应用等多种场景。
614 0
|
2月前
|
安全 C语言
C语言中的字符、字符串及内存操作函数详细讲解
通过这些函数的正确使用,可以有效管理字符串和内存操作,它们是C语言编程中不可或缺的工具。
234 15
|
2月前
|
存储 缓存 NoSQL
内存管理基础:数据结构的存储方式
数据结构在内存中的存储方式主要包括连续存储、链式存储、索引存储和散列存储。连续存储如数组,数据元素按顺序连续存放,访问速度快但扩展性差;链式存储如链表,通过指针连接分散的节点,便于插入删除但访问效率低;索引存储通过索引表提高查找效率,常用于数据库系统;散列存储如哈希表,通过哈希函数实现快速存取,但需处理冲突。不同场景下应根据访问模式、数据规模和操作频率选择合适的存储结构,甚至结合多种方式以达到最优性能。掌握这些存储机制是构建高效程序和理解高级数据结构的基础。
198 1
|
2月前
|
存储 弹性计算 固态存储
阿里云服务器配置费用整理,支持一万人CPU内存、公网带宽和存储IO性能全解析
要支撑1万人在线流量,需选择阿里云企业级ECS服务器,如通用型g系列、高主频型hf系列或通用算力型u1实例,配置如16核64G及以上,搭配高带宽与SSD/ESSD云盘,费用约数千元每月。
186 0
|
7月前
|
存储 人工智能 程序员
一文彻底搞清楚C语言的数据类型和变量
本文介绍了数据类型(基本、构造、指针、空类型)、变量(使用、命名规则、作用域)和常量(字面、符号、枚举、表达式),帮助初学者理解编程基础概念。坚持学习,定能创造奇迹!
727 1
一文彻底搞清楚C语言的数据类型和变量
|
8月前
|
C语言
【C语言程序设计——入门】基本数据类型与表达式(头歌实践教学平台习题)【合集】
这份文档详细介绍了编程任务的多个关卡,涵盖C语言的基础知识和应用。主要内容包括: 1. **目录**:列出所有关卡,如`print函数操作`、`转义字符使用`、`数的向上取整`等。 2. **各关卡的任务描述**:明确每关的具体编程任务,例如使用`printf`函数输出特定字符串、实现向上取整功能等。 3. **相关知识**:提供完成任务所需的背景知识,如格式化输出、算术运算符、关系运算符等。 4. **编程要求**:给出具体的代码编写提示。 5. **测试说明**:包含预期输入输出,帮助验证程序正确性。 6. 文档通过逐步引导学习者掌握C语言的基本语法和常用函数,适合初学者练习编程技能。
219 1
|
9月前
|
存储 缓存 算法
【C语言】内存管理函数详细讲解
在C语言编程中,内存管理是至关重要的。动态内存分配函数允许程序在运行时请求和释放内存,这对于处理不确定大小的数据结构至关重要。以下是C语言内存管理函数的详细讲解,包括每个函数的功能、标准格式、示例代码、代码解释及其输出。
319 6
|
存储 编译器 C语言
【C语言篇】数据在内存中的存储(超详细)
浮点数就采⽤下⾯的规则表⽰,即指数E的真实值加上127(或1023),再将有效数字M去掉整数部分的1。
800 0
|
11月前
|
存储
共用体在内存中如何存储数据
共用体(Union)在内存中为所有成员分配同一段内存空间,大小等于最大成员所需的空间。这意味着所有成员共享同一块内存,但同一时间只能存储其中一个成员的数据,无法同时保存多个成员的值。