【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月前
|
存储 程序员 编译器
C 语言中的数据类型转换:连接不同数据世界的桥梁
C语言中的数据类型转换是程序设计中不可或缺的一部分,它如同连接不同数据世界的桥梁,使得不同类型的变量之间能够互相传递和转换,确保了程序的灵活性与兼容性。通过强制类型转换或自动类型转换,C语言允许开发者在保证数据完整性的前提下,实现复杂的数据处理逻辑。
|
1月前
|
存储 数据管理 C语言
C 语言中的文件操作:数据持久化的关键桥梁
C语言中的文件操作是实现数据持久化的重要手段,通过 fopen、fclose、fread、fwrite 等函数,可以实现对文件的创建、读写和关闭,构建程序与外部数据存储之间的桥梁。
|
2月前
|
存储 数据建模 程序员
C 语言结构体 —— 数据封装的利器
C语言结构体是一种用户自定义的数据类型,用于将不同类型的数据组合在一起,形成一个整体。它支持数据封装,便于管理和传递复杂数据,是程序设计中的重要工具。
|
2月前
|
存储 编译器 数据处理
C 语言结构体与位域:高效数据组织与内存优化
C语言中的结构体与位域是实现高效数据组织和内存优化的重要工具。结构体允许将不同类型的数据组合成一个整体,而位域则进一步允许对结构体成员的位进行精细控制,以节省内存空间。两者结合使用,可在嵌入式系统等资源受限环境中发挥巨大作用。
86 11
|
3月前
|
监控 算法 应用服务中间件
“四两拨千斤” —— 1.2MB 数据如何吃掉 10GB 内存
一个特殊请求引发服务器内存用量暴涨进而导致进程 OOM 的惨案。
105 14
|
3月前
|
存储 C语言
数据在内存中的存储方式
本文介绍了计算机中整数和浮点数的存储方式,包括整数的原码、反码、补码,以及浮点数的IEEE754标准存储格式。同时,探讨了大小端字节序的概念及其判断方法,通过实例代码展示了这些概念的实际应用。
181 1
|
3月前
|
存储
共用体在内存中如何存储数据
共用体(Union)在内存中为所有成员分配同一段内存空间,大小等于最大成员所需的空间。这意味着所有成员共享同一块内存,但同一时间只能存储其中一个成员的数据,无法同时保存多个成员的值。
|
8月前
|
存储 C语言
C语言中的数据输入输出
C语言中的数据输入输出
109 0
|
缓存 C语言
C语言——数据的输入输出
C语言——数据的输入输出
|
C语言
C语言 字符数据输入输出
C语言 字符数据输入输出
134 0
C语言 字符数据输入输出

热门文章

最新文章