【C语言内功】“数据在内存中的存储“(一)

简介: 【C语言内功】“数据在内存中的存储“

一.字符串类型

类型的意义:1,使用这个类型开辟内存空间的大小(决定了使用范围)

image.png

二.字符储存的规则

字符存储是凭借Ascall码值,而正好ascall码值也属于整型,所以char也归于整型

int main()
{
  char x = 'a';
  printf("%c\n", x);//a
  printf("%d", x);//97
  return 0;
}

三.void

*void表示空类型(无类型),通常用于1(函数的返回类型)2(函数指针)3(指针类型)

例:

int main()
{
  void* p = NULL;
  int a = 10;
  void* p = &a;
  //两个重要规则
  1.不能进行运算 p1++  err
    2.不能取地址 *p  err
}

四.原反补码(整型)

  1.   均有符号位(0表示正,1表示负)和数值位
  2.   正数的原反补相同
  3.   负数的原反补各不相同

1.原反补(正负数)的表示方式:

    int a=20;
  int b=-20;
  4byte=32bit;
  正数的原反补相同 20
  00000000000000000000000000010100
  负数的原反补 -20
  1 0000000000000000000000000010100 原码
  1 1111111111111111111111111101011 反码
  符号位不变 数值位按位取反
  1 1111111111111111111111111101100 补码
  反码+1

.原反补码的相互转换规则:

  • 对于整形来说:数据存放在内存中实际上存放的是补码
  • 原码到补法:   取反后,+1
  • 补码到原码:法一:-1后,取反   法二:取反后,+1

五.计算机实现减法的方式

int c = 1 - 1;
//1-1
//1+(-1)
//  00000000000000000000000000000001  1的补码
//  11111111111111111111111111111111  -1的补码
//1 00000000000000000000000000000000 发生截断

六.数据的存储,是以字节为单位(8byte)

ps:图中为大端字节序(具体见相关知识点)

image.png

七.大小端介绍

 1.大端(存储)模式,是指数据高字节位保存在内存低地址处,低位同理。

 2.小端(存储)模式,是指数据高字节位保存在内存高地址处,高位同理。

image.png

八.进制位

 16进制位依次是0~15(0~9 a b c d e f)

 0x是16进制位的标识

 一个16进制位表示4个二进制位,两个16进制位为1个字节

两道例题体会“整型提升”“数据的截断”:

考察点:


整型提升(有符号:符号位提升;  无符号unsigned:高位补0)

数据的截断(超出该数据类型的范围时)

例题1

image.png

image.png

例题2
image.png

image.png

相关文章
|
2天前
|
存储 程序员 编译器
C 语言中的数据类型转换:连接不同数据世界的桥梁
C语言中的数据类型转换是程序设计中不可或缺的一部分,它如同连接不同数据世界的桥梁,使得不同类型的变量之间能够互相传递和转换,确保了程序的灵活性与兼容性。通过强制类型转换或自动类型转换,C语言允许开发者在保证数据完整性的前提下,实现复杂的数据处理逻辑。
|
5天前
|
传感器 人工智能 物联网
C 语言在计算机科学中尤其在硬件交互方面占据重要地位。本文探讨了 C 语言与硬件交互的主要方法,包括直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射 I/O 和设备驱动程序开发
C 语言在计算机科学中尤其在硬件交互方面占据重要地位。本文探讨了 C 语言与硬件交互的主要方法,包括直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射 I/O 和设备驱动程序开发,以及面临的挑战和未来趋势,旨在帮助读者深入了解并掌握这些关键技术。
26 6
|
6天前
|
存储 数据建模 程序员
C 语言结构体 —— 数据封装的利器
C语言结构体是一种用户自定义的数据类型,用于将不同类型的数据组合在一起,形成一个整体。它支持数据封装,便于管理和传递复杂数据,是程序设计中的重要工具。
|
12天前
|
存储 编译器 数据处理
C 语言结构体与位域:高效数据组织与内存优化
C语言中的结构体与位域是实现高效数据组织和内存优化的重要工具。结构体允许将不同类型的数据组合成一个整体,而位域则进一步允许对结构体成员的位进行精细控制,以节省内存空间。两者结合使用,可在嵌入式系统等资源受限环境中发挥巨大作用。
34 11
|
2月前
|
监控 算法 应用服务中间件
“四两拨千斤” —— 1.2MB 数据如何吃掉 10GB 内存
一个特殊请求引发服务器内存用量暴涨进而导致进程 OOM 的惨案。
|
1月前
|
C语言
【c语言】动态内存管理
本文介绍了C语言中的动态内存管理,包括其必要性及相关的四个函数:`malloc`、``calloc``、`realloc`和`free`。`malloc`用于申请内存,`calloc`申请并初始化内存,`realloc`调整内存大小,`free`释放内存。文章还列举了常见的动态内存管理错误,如空指针解引用、越界访问、错误释放等,并提供了示例代码帮助理解。
44 3
|
2月前
|
存储 C语言
数据在内存中的存储方式
本文介绍了计算机中整数和浮点数的存储方式,包括整数的原码、反码、补码,以及浮点数的IEEE754标准存储格式。同时,探讨了大小端字节序的概念及其判断方法,通过实例代码展示了这些概念的实际应用。
64 1
|
2月前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
36 3
|
1天前
|
存储 缓存 算法
【C语言】内存管理函数详细讲解
在C语言编程中,内存管理是至关重要的。动态内存分配函数允许程序在运行时请求和释放内存,这对于处理不确定大小的数据结构至关重要。以下是C语言内存管理函数的详细讲解,包括每个函数的功能、标准格式、示例代码、代码解释及其输出。
21 6
|
18天前
|
C语言
c语言调用的函数的声明
被调用的函数的声明: 一个函数调用另一个函数需具备的条件: 首先被调用的函数必须是已经存在的函数,即头文件中存在或已经定义过; 如果使用库函数,一般应该在本文件开头用#include命令将调用有关库函数时在所需要用到的信息“包含”到本文件中。.h文件是头文件所用的后缀。 如果使用用户自己定义的函数,而且该函数与使用它的函数在同一个文件中,一般还应该在主调函数中对被调用的函数做声明。 如果被调用的函数定义出现在主调函数之前可以不必声明。 如果已在所有函数定义之前,在函数的外部已做了函数声明,则在各个主调函数中不必多所调用的函数在做声明
31 6