关于byte储存-128的问题
来源:互联网 发布:提示软件license未授权 编辑:程序博客网 时间:2024/06/06 01:48
首先,byte的存储范围是-128到127,那么是怎么做到的呢,我觉得这一个解释方法可以解释。
首先,一个8位2进制的数可以表示的范围是0到255,即【0000 0000】到【1111 1111】,那么我们把最左边的一位看做是正负号的标示,那么正数的范围是【0000 0000】到【0111 1111】,即0到127.负数的范围是【1000 0001】到【1111 1111】,即-127到-1,。
这个时候我们会发现,【1000 0000】这个数究竟代表什么数好呢,如果把它看做是-0,好像不大合适,那么,我们就要看看从二进制的数的补码的意义。
补码即是把二进制的减法转化为加法来进行计算,如果相加得出的数超出了8位,那么即舍去最高位,如果把舍去后的最高位看做是一个数,这就相当于我们做的运算是在0到255之间循环,假如超过了255,即转化为0到256之间的一个数,比如计算的结果是257,那么就相当于0到255的结果的2。
现在我们解决了数据溢出的问题,然后把最高位看做是正负号的标示,也就相当于我们把取值范围从0到255转移到了-127到127之间,但是还有一个【1000 0000】表示什么呢?那么我们看看两个数之间的转换规律:
我们先把128剔除(因为它的二进制数是【1000 0000】),把原本的数设为a,转换后的数设为b,然后他们之间有一个关系:
公式1:当0<=a<128时,b=a;(b为整数)
公式2:当128<a<=255时,b=a-256;(b为负数)
其实他们二进制的标示就是最高位的差别。
那么假如说把128考虑进去,它的二进制数是【1000 0000】,很明显它不符合整数的命名规范,只能是负数了,而运用公:2,它只能表示为-128(尽管128不在取值范围里面,但也只能扩张公式2的取值范围而不是扩张公式1的取值范围),也就是说,范围是0到255里面的128,到了范围是-127到127里面的数,没有对应的数,只能把范围扩大,即范围扩大到-128到127。
78 原码:【0100 1110】 反码:【0100 1110】 补码【0100 1110】
-123 原码:【1111 1010】 反码:【1000 0101】 补码【1000 0110】
正数的原码、反码、补码都相同,负数的反码是原码的除符号位外的数都取反,补码是反码加1。
-123的补码如果直接转换为2进制的数的话是133,刚好满足公式二:-123=133-256。
- 关于byte储存-128的问题
- 关于byte的溢出问题
- 关于MemoryStream转byte的一个问题
- 关于Socket发送byte数组的问题
- 关于java中byte的相关问题
- Redis关于对象的储存
- 关于java中byte只能表示-128~127的问题的解释及处理
- 关于字符串与字节byte之前的相互转换问题
- 关于MD5加密中转换byte为十六进制的问题
- 关于byte 进制 float String 编码 16进制字符串转16进制byte的问题
- 关于储存
- byte类型的问题
- 关于cookie储存用serialize方式或json_encode方式转化的数组问题
- 关于0x80000000为什么等于-2147483648和负数在内存上储存的问题
- unity 关于手机客户端的本地文件储存问题 文件路径--适用于安卓手机
- 关于0x80000000为什么等于-2147483648和负数在内存上储存的问题
- 关于顺序储存结构的构思内容
- 关于模拟信号和数字信号的储存
- 灰帽子Python 学习记录 5
- poj题目分类
- QDialog对话框中show()和exec()
- java中集合的接口和类
- 手机开发实战18——GPRS移动台分类
- 关于byte储存-128的问题
- pthread_exit()
- Android 撕开美女衣服解析
- safari(css,jquery)仿iosNative的actionsheet
- java注解学习2,注解的定义与反射调用
- 部分排序算法python实现
- django教程:django后台很巧妙的技巧
- 深入理解枚举类型之基础用法
- APP开发实战19-TCP和HTTP连接