【C语言】数据在内存中存储练习

简介: 【C语言】数据在内存中存储练习

代码一:

#include<stdio.h>
int main()
{
  char a = -1;
  signed char b = -1;
  unsigned char c = -1;
  printf("a=%d b=%d c=%d", a, b, c);
  return 0;
}

分析思路:

  1. 写出-1这个数的二进制补码
  2. 当类型为char的时候数据需要截断储存
  3. 当数据以整数类型打印的时候就要发生整型提升、
  4. 如下分析:
  5. 当把-1的补码放到char 类型的数据中存储是会发生截断如图所示:
  6. 所以a,b,c,中存放的都是11111111

但是当以整数的形式取出来的时候就不一样了,会发生整型提升。

所以%d打印a的值为-1.

所以%d打印b的值为-1.

所以%d打印c的值为255

程序运行结果如图所示:

代码二:

#include<stdio.h>
int main()
{
  char a = -128;
  printf("%u\n", a);
  return 0;
}

思路分析:

  1. 写出-1这个数的二进制补码
  2. 当类型为char的时候数据需要截断储存
  3. 当数据以%u打印的时候就要发生整型提升
  4. -128在char类型中的储存:
  5. 所以程序输出的结果为:4294967168

实际的结果:

结论:

负数的整形提升

所以整形提升的时候,高位补充符号位,即为1

正数的整形提升

所以整形提升的时候,高位补充符号位,即为0

无符号整形提升,高位补0

原码——>反码

符号位不变其他位按位取反

反码——>补码

反码+1

补码到原码方式一:

补码——>反码

补码-1

反码——>原码

符号位不变其他位按位取反

方式二:

补码按位取反之后+1得到原码

以上就是数据储存的练习。

相关文章
|
1天前
|
存储
共用体在内存中如何存储数据
共用体(Union)在内存中为所有成员分配同一段内存空间,大小等于最大成员所需的空间。这意味着所有成员共享同一块内存,但同一时间只能存储其中一个成员的数据,无法同时保存多个成员的值。
|
3天前
|
监控 Java easyexcel
面试官:POI大量数据读取内存溢出?如何解决?
【10月更文挑战第14天】 在处理大量数据时,使用Apache POI库读取Excel文件可能会导致内存溢出的问题。这是因为POI在读取Excel文件时,会将整个文档加载到内存中,如果文件过大,就会消耗大量内存。以下是一些解决这一问题的策略:
12 1
|
5天前
|
存储 弹性计算 算法
前端大模型应用笔记(四):如何在资源受限例如1核和1G内存的端侧或ECS上运行一个合适的向量存储库及如何优化
本文探讨了在资源受限的嵌入式设备(如1核处理器和1GB内存)上实现高效向量存储和检索的方法,旨在支持端侧大模型应用。文章分析了Annoy、HNSWLib、NMSLib、FLANN、VP-Trees和Lshbox等向量存储库的特点与适用场景,推荐Annoy作为多数情况下的首选方案,并提出了数据预处理、索引优化、查询优化等策略以提升性能。通过这些方法,即使在资源受限的环境中也能实现高效的向量检索。
|
6天前
|
缓存 安全 Java
使用 Java 内存模型解决多线程中的数据竞争问题
【10月更文挑战第11天】在 Java 多线程编程中,数据竞争是一个常见问题。通过使用 `synchronized` 关键字、`volatile` 关键字、原子类、显式锁、避免共享可变数据、合理设计数据结构、遵循线程安全原则和使用线程池等方法,可以有效解决数据竞争问题,确保程序的正确性和稳定性。
13 2
|
10天前
|
存储 编译器
数据在内存中的存储
数据在内存中的存储
29 4
|
8天前
|
存储 Java
JVM知识体系学习四:排序规范(happens-before原则)、对象创建过程、对象的内存中存储布局、对象的大小、对象头内容、对象如何定位、对象如何分配
这篇文章详细地介绍了Java对象的创建过程、内存布局、对象头的MarkWord、对象的定位方式以及对象的分配策略,并深入探讨了happens-before原则以确保多线程环境下的正确同步。
24 0
JVM知识体系学习四:排序规范(happens-before原则)、对象创建过程、对象的内存中存储布局、对象的大小、对象头内容、对象如何定位、对象如何分配
|
6天前
|
C语言
保姆级教学 - C语言 之 动态内存管理
保姆级教学 - C语言 之 动态内存管理
11 0
|
3月前
|
存储 分布式计算 Hadoop
HadoopCPU、内存、存储限制
【7月更文挑战第13天】
249 14
|
2月前
|
存储 编译器 C语言
【C语言篇】数据在内存中的存储(超详细)
浮点数就采⽤下⾯的规则表⽰,即指数E的真实值加上127(或1023),再将有效数字M去掉整数部分的1。
260 0
|
16天前
|
存储 机器学习/深度学习 人工智能
数据在内存中的存储
数据在内存中的存储