一个小菜鸟对数据在内存中的二进制存储的理解
来源:互联网 发布:淘宝模板市场 编辑:程序博客网 时间:2024/05/18 21:49
之前一直不理解数据在内存中的存储方式,只知道教科书上写死的是整数在内存中以补码形式储存,所谓的补码就是根据整数的原码,正数的补码就是原码本身,负数则是原码除符号位外每一位都取反然后加一,例如整数10 以8位二进制表示时的原码为00001010,则按照补码的转换规则,其补码为00001010,-10的补码为11110110。
但是只有这么一种感性的认识,并没有亲身实验过,今天突然心血来潮就写了个小程序,从开始的不理解,后来查了些资料,想通了不少,特此记录下,若有不对的地方万望指出,废话不多说,先上简单代码,本例用short类型来测试,本屌的机子上sizeof(short)为2个字节。
然后运行结果:
首先明确有符号位的short类型的数据可表示的长度为1000 0000 0000 0000~0111 1111 1111 1111也就是-32768~32767,最高位为符号位,不参与计算。
对于i来说,i是short可表示的最大正数,所以输出的是32767;
对于j,32768可表示为32767+1,32767的原码为0111 1111 1111 1111,在计算机里的储存方式为补码即0111 1111 1111 1111,加一后变成1000 0000 0000 0000即
-32768,故输出为-32768;
对于k, -32768是short可表示的最小值,查了下资料,说是所有补码体系中没有代码与该值重合,于是就人为的定义为负值的最小值了。
对于x,-32769可表示为-32767-2,-32767原码为1111 1111 1111 1111,补码为1000 0000 0000 0001,减2后变成0111 1111 1111 1111也就是32767了;
对于y, 32769可表示为32767+2,32767原码为0111 1111 1111 1111,补码和原码一样,加2后同理变成-32767了;
对于g, 并没有溢出所以输出-32767.
- 一个小菜鸟对数据在内存中的二进制存储的理解
- 获得一个数据在内存中存储的二进制形式
- 打印数据在内存中的二进制存储格式
- 数据在内存中的存储
- 数据在内存中的存储
- 数据在内存中的存储
- 小端机器数据在内存中的存储
- 关于整数在内存中的二进制存储方式,打印一个整数的二进制的几种方式
- 对 int a=2;在内存存储的理解!
- java中数据在内存中的存储
- 基本类型数据在内存中的存储
- float数据在内存中的存储方法
- 数据在内存中的存储方式
- float数据在内存中的存储方法
- float数据在内存中的存储方法
- 数据在内存中的存储方式
- float数据在内存中的存储方法
- java中数据在内存中的存储
- Company A面试 笔试 : 爬山 算步骤 问题 另外一种解法
- 通过几段代码,理清angularJS中的$injector、$rootScope和$scope的概念和关联关系
- android shape渐变详解
- 一个简单的hibernate+mysql的实例java/jsp开发
- AIDL
- 一个小菜鸟对数据在内存中的二进制存储的理解
- try-catch的用法
- Android Studio如何引用外部Library工程
- 创龙 DM8148 开发板
- 缩略图Thumbnails
- hbase 0.98.9客户端的两个参数调优
- SeekBar控件的使用
- mysql全文索引中文搜索
- C语言基础知识总结