【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

相关文章
|
5月前
|
存储
阿里云轻量应用服务器收费标准价格表:200Mbps带宽、CPU内存及存储配置详解
阿里云香港轻量应用服务器,200Mbps带宽,免备案,支持多IP及国际线路,月租25元起,年付享8.5折优惠,适用于网站、应用等多种场景。
1954 0
|
5月前
|
安全 C语言 C++
比较C++的内存分配与管理方式new/delete与C语言中的malloc/realloc/calloc/free。
在实用性方面,C++的内存管理方式提供了面向对象的特性,它是处理构造和析构、需要类型安全和异常处理的首选方案。而C语言的内存管理函数适用于简单的内存分配,例如分配原始内存块或复杂性较低的数据结构,没有构造和析构的要求。当从C迁移到C++,或在C++中使用C代码时,了解两种内存管理方式的差异非常重要。
229 26
|
5月前
|
安全 C语言
C语言中的字符、字符串及内存操作函数详细讲解
通过这些函数的正确使用,可以有效管理字符串和内存操作,它们是C语言编程中不可或缺的工具。
341 15
|
5月前
|
存储 缓存 NoSQL
内存管理基础:数据结构的存储方式
数据结构在内存中的存储方式主要包括连续存储、链式存储、索引存储和散列存储。连续存储如数组,数据元素按顺序连续存放,访问速度快但扩展性差;链式存储如链表,通过指针连接分散的节点,便于插入删除但访问效率低;索引存储通过索引表提高查找效率,常用于数据库系统;散列存储如哈希表,通过哈希函数实现快速存取,但需处理冲突。不同场景下应根据访问模式、数据规模和操作频率选择合适的存储结构,甚至结合多种方式以达到最优性能。掌握这些存储机制是构建高效程序和理解高级数据结构的基础。
604 1
|
5月前
|
存储 弹性计算 固态存储
阿里云服务器配置费用整理,支持一万人CPU内存、公网带宽和存储IO性能全解析
要支撑1万人在线流量,需选择阿里云企业级ECS服务器,如通用型g系列、高主频型hf系列或通用算力型u1实例,配置如16核64G及以上,搭配高带宽与SSD/ESSD云盘,费用约数千元每月。
552 0
|
存储 程序员 编译器
C 语言中的数据类型转换:连接不同数据世界的桥梁
C语言中的数据类型转换是程序设计中不可或缺的一部分,它如同连接不同数据世界的桥梁,使得不同类型的变量之间能够互相传递和转换,确保了程序的灵活性与兼容性。通过强制类型转换或自动类型转换,C语言允许开发者在保证数据完整性的前提下,实现复杂的数据处理逻辑。
|
11月前
|
消息中间件 存储 缓存
kafka 的数据是放在磁盘上还是内存上,为什么速度会快?
Kafka的数据存储机制通过将数据同时写入磁盘和内存,确保高吞吐量与持久性。其日志文件按主题和分区组织,使用预写日志(WAL)保证数据持久性,并借助操作系统的页缓存加速读取。Kafka采用顺序I/O、零拷贝技术和批量处理优化性能,支持分区分段以实现并行处理。示例代码展示了如何使用KafkaProducer发送消息。
|
存储 编译器 程序员
【C语言】内存布局大揭秘 ! -《堆、栈和你从未听说过的内存角落》
在C语言中,内存布局是程序运行时非常重要的概念。内存布局直接影响程序的性能、稳定性和安全性。理解C程序的内存布局,有助于编写更高效和可靠的代码。本文将详细介绍C程序的内存布局,包括代码段、数据段、堆、栈等部分,并提供相关的示例和应用。
457 5
【C语言】内存布局大揭秘 ! -《堆、栈和你从未听说过的内存角落》
|
存储 数据管理 C语言
C 语言中的文件操作:数据持久化的关键桥梁
C语言中的文件操作是实现数据持久化的重要手段,通过 fopen、fclose、fread、fwrite 等函数,可以实现对文件的创建、读写和关闭,构建程序与外部数据存储之间的桥梁。