理解数据存储

首先抛出问题:

1.int k; char c = (char) k; 请问c中保留的是高位还是地位?

解决这个问题,联合体是最好的理解方式。对于联合体而言,首地址只有一个。就是最低位的地址。而读取数据总是从低位开始读的。每次读取不大于数据总线宽度的位数。

对于一个32位的机器,是可以一次读入四个字节的,包括浮点数,整数等。当数据类型长度大于32时,显然运算效率就会降低。如图,0的位置就是首地址,从0开始读,一个double类型的读两次,一次读32位。之所以将低位写在左边,是为了和我们平时的书写数值习惯相吻合,同时也是与位移操作保持一致。

而对于字符串的书写,我们又是另外一种情形。如“ABCD”。我建议为了与数值的书写保持一致,把它想象的倒过来写,这样,就可以完美的弄清楚类型转换之间的关系了。

数据总是从低位开始读的。

于是我们可以轻易的判断出整数x04241(x042是B,x041是A)里边存储的首字符是‘A’。长数据到短数据是保留的低位数据。短数据到长数据增加的是高位0。所以有如下测试程序和结果

union {
    char c;
    __int8 i;
    __int64 d;
}sdd;

int main (){
    sdd.c=‘c‘;
    sdd.d =0x44434241;
    int k = 0x4241;
    k |= 1<<1;
    printf("%d\n",&sdd.i);
    printf("%d\n",&sdd);
    printf("%d\n",&sdd.d);
    printf("%c\n",sdd.c);
    printf("%c",(char)k);
}

输出为:

17863024

17863024

17863024

A

C

由此可知,联合体也总是从首地址(地位)开始读。自带类型转换,通过增减高位来完成类型转换。

时间: 2025-01-05 23:10:04

理解数据存储的相关文章

iOS数据存储之属性列表理解

iOS数据存储之属性列表理解 数据存储简介 数据存储,即数据持久化,是指以何种方式保存应用程序的数据. 我的理解是,开发了一款应用之后,应用在内存中运行时会产生很多数据,这些数据在程序运行时和程序一起驻留在内存中,一旦程序运行结束从内存中退出后,这些数据也就相应消失了.等到再次运行程序的时候,之前的那些数据又要重新计算.但是对于一些应用,我们需要将程序产生的数据持久的保存起来,使得应用重启之后这些数据不会丢失,这时候就需要用到数据的持久化技术. 在iOS设备上实现数据持久化存储的方式有很多中机制

在Winform开发中使用日程控件XtraScheduler(2)--深入理解数据的存储

在上篇随笔<在Winform开发中使用日程控件XtraScheduler>中介绍了DevExpress的XtraScheduler日程控件的各种使用知识点,对于我们来说,日程控件不陌生,如OutLook里面就有日历的模块,但是这个日程控件真的是很复杂的一个控件,需要全面掌握可能需要花费很多的时间去了解,由于是技术研究,我总是希望把它常用的功能剖析的更加彻底一些,前面随笔也介绍了它的存储功能,把它基于实体类的方式存储在数据库里面,不过介绍的还不够,本文继续上面的内容,进行数据存储方面的介绍. 在

深入理解开源数据库中间件 Vitess:核心特性以及如何进行数据存储的堆叠

概述 Vitess 是一个用于 MySql 扩展的数据库解决方案.它以能够像运行在专用硬件上那样有效地运行在云体系为目标进行架构.它集 MySql 数据库的很多重要特性和 NoSQL 数据库的可扩展性于一体.Vitess 已经成功侍服了 2011 年以来所有的 YouTube 数据库流量. Kubernetes 上的 Vitess Kubernetes 是 Google 开源的 Docker 容器集群管理系统,Vitess 是 Kubernetes 用户的逻辑存储引擎的一个可选项.Kuberne

理解 Android 本地数据存储 API

利用首选项.SQLite 和内部及外部内存 API 对于需要跨应用程序执行期间或生命期而维护重要信息的应用程序来说,能够在移动设备上本地存储数据是一种非常关键的功能.作为一名开发人员,您经常需要存储诸如用户首选项或应用程序配置之类的信息.您还必须根据一些特征(比如访问可见性)决定是否需要涉及内部或外部存储器,或者是否需要处理更复杂的.结构化的数据类型.跟随本文学习 Android 数据存储 API,具体来讲就是首选项.SQLite 和内部及外部内存 API. http://www.ibm.com

HBase介绍(2)---数据存储结构

在本文中的HBase术语:基于列:column-oriented行:row列组:column families列:column单元:cell 理解HBase(一个开源的Google的BigTable实际应用)最大的困难是HBase的数据结构概念究竟是什么?首先HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库.另一个不同的是HBase基于列的而不是基于行的模式. Google's BigTable论文 清楚地解释了什么是BigTable:Bigtable是一个疏松的分布式的

性能优化之数据存储&DOM编程

数据存储 ·在javascript中,数据存储的位置会对代码整体性能产生重大的影响. ·数据存储共有4种方式:字面量.变量.数组.对象成员. ·要理解变量的访问速度,就要理解作用域.由于局部变量处于作用域的起始位置,因此访问速度比访问跨域作用域变量(即除起始位置之外的外层作用域变量)更快.即变量处在作用域的位置越深,访问速度越慢.这也就说明,访问全局变量的速度是最慢的. 总的来说,字面量和局部变量的访问速度快于数组和对象成员的访问速度. 因此,常见的一些提高数据访问速度的方法有: ①避免使用wi

Atitit &#160;数据存储的分组聚合 groupby的实现attilax总结

Atitit  数据存储的分组聚合 groupby的实现attilax总结 1. 聚合操作1 1.1. a.标量聚合 流聚合1 1.2. b.哈希聚合2 1.3. 所有的最优计划的选择都是基于现有统计信息来评估3 1.4. 参考资料3 1. 聚合操作 聚合也是我们在写T-SQL语句的时候经常遇到的,我们来分析一下一些常用的聚合操作运算符的特性和可优化项. 1.1. a.标量聚合 流聚合 标量聚合是一种常用的数据聚合方式,比如我们写的语句中利用的以下聚合函数:MAX().MIN().AVG().C

Android开发手记(16) 数据存储一 SharedPreferences

SharedPreferences是Android中最容易理解的数据存储技术,实际上SharedPreferences处理的就是一个key-value(键值对)SharedPreferences常用来存储一些轻量级的数据.这类似于C++中Map的数据存储方式(实际上在最后生成的.xml文件内,就是以Map格式存储的). 获取SharedPreferences的两种方式: 1.调用Context对象的getSharedPreferences()方法 2.调用Activity对象的getPrefer

SQL Server :理解数据记录结构

在SQL Server :理解数据页结构我们提到每条记录都有7 bytes的系统行开销,那这个7 bytes行开销到底是一个什么样的结构,我们一起来看下. 数据记录存储我们具体的数据,换句话说,它存在堆表里,或者存在聚集索引的叶子节点.数据记录结构是为了让SQL Server更高效的管理数据.我们来看下数据记录结构示意图: 上图中蓝色部分是所有数据记录部分,绿色部分是表结构里取决于定长/变长列的数据记录部分. 行头系统数据: 用做状态位1的第1字节(8位)是用来定义记录的属性: 第0位:版本信息