数据在内存中的存储 |
您所在的位置:网站首页 › c语言中如何判断数据类型 › 数据在内存中的存储 |
目录 前言 一、C语言的内置数据类型 二、数据在内存中的存储 1.原码·反码·补码 2.举一个例子来说明: 二.读入数据 1.大端存储与小端存储 2.那么如何判断自己所用设备的大小端呢?(仅仅与设备硬件有关!) 三.整形提升,截断与二进制码的关系 1.在开始讲述之前我们先展示几道例题: 2.接下来为你解释几个你可能疑惑的点: (1)signed与unsigned? (2)输出格式“%u”是什么意思? (3)什么是整型提升? (4)整形提升的意义? (5)缺省整形? (6)如何进行整形提升? (6)此条为补充说明: (7)数据的计算都是使用补码进行计算的,在输出时是以原码进行展示的 3.解题: 1.第一题编辑 2.第二题 3.第三题 总结 前言本文主要介绍以下几方面内容: 一.C语言内置数据类型 二.数据在内存中的存储:1.大端小端问题 2.如何验证自己的设备属于哪一类 三.原码,反码,补码的相关运算及与整型提升的关系 一、C语言的内置数据类型说明:在C语言中对long类型占用内存的定义是:long占用内存≥int类型占用内存 数据类型 类型名称 占用内存大小char字符型1字节short短整型2字节int整形4字节long (int)长整型>=4字节long long (int)更长整型8字节float单精度浮点型4字节doubel双精度浮点型8字节 二、数据在内存中的存储 1.原码·反码·补码对于正数来说,三者关系如下: 对于负数来说,三者的关系如下: 2.举一个例子来说明:在内存中存储数据时规定:最高位为符号位,其余位为数值位
二.读入数据 1.大端存储与小端存储 读入数据即使指我们对变量赋值后,变量的值在内存中存储的方式 (不要与上文弄混,上文讲的是存储的形式,是以二进制为例,但一般内存的存储形式是十六进制,) 存储方法 定义大端存储数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址 中小端存储数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地 址中这样说可能不太好理解,我们画图进行说明: 小端存储就是把一个数的低位字节内容存到低地址区,将高位字节内容存到高地址区 大端存储则是把一个数的低位字节内容存到高地址区,将高位字节内存存到低地址区 2.那么如何判断自己所用设备的大小端呢?(仅仅与设备硬件有关!) int main() { int a = 10; if (*(char*)&a == 10) { printf("小端"); } else { printf("大端"); } return 0; }通过上边的解释我们不难发现: 如果一个非字符数足够小(字符型只有一个字节位,大小端存储结果一样),小到一个字节就可以表示, 同时, 我们也知道对变量取地址通常取出的是其低位地址,再利用char *只能取出一字节地址的特性。 结合上文我们提到到,同一变量大端存储和小端存储的低位地址上的内容是不同的, 进而,直接比较变量低位字节上的数值是否与变量数值相同即可判定是哪一种存储方式。 三.整形提升,截断与二进制码的关系 1.在开始讲述之前我们先展示几道例题: 1. //输出什么? #include 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; } 2. #include int main() { char a = -128; printf("%u\n",a); return 0; } 3. int main() { char a[1000]; int i; for(i=0; i |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |