Java中byte的符号位
来源:互联网 发布:最近流行什么网络词语 编辑:程序博客网 时间:2024/05/17 12:05
转自:http://blog.csdn.net/yarshray/archive/2009/05/20/4203282.aspx
在Java中byte类型是有符号的,而Java中又没有提供无符号的byte类型,因此在其表示范围为-128-127之间。而这样对于一些I/O处理程序来说需要对考虑符号位问题,通常的做法可能是:
int unsignedByte = signedByte >=0 ? signedByte : signedByte + 256;
这里我们发现,由于byte的符号位的关系,我们不得不采用长度更长的int类型来处理符号位带来的问题。因此,我们会觉得byte由于要考虑符号位其范围变小了,所以,我们只好通过int来处理。在这个类型的转换过程中,任意长度的int类型会截断其高位的字节来适应byte类型,因为int类型要比byte类型宽。这也就是为什么一个int的127转换成了byte还是一个127。
不过,我们考虑另外一种情况,就是当一个int值大过byte表示的数值范围的时候,这个时候问题就出现了。比如,int的128转换成一个byte类型会是-128。这是因为补码运算的关系造成的。首先,128写成16进制是0x00000080,当做int到byte的类型转换的时候,前面的0被截断形成0x80。在二进制中0x80可以写成10000000,如果这是一个无符号数哪么一切正常,但是如果是一个有符号数就会经过补码运算。对于负数而言,其补码运算就是反码(就是1转换成0并且反正既然)加一。哪么,10000000的补码就是01111111加一,即10000000=128(十进制)。因此,byte0x80事实上表示的也
就是-128了。类似的int类型的129就是byte类型的-127,而int类型的130则是byte类型的-126,等等,直到int的255对应为byte的-1。
哪么如果到了256呢?此时,地位的字节被0来填充,简而言之256就是0x00000100。因此,转换成byte就是0,这个转换循环也就是256个。因此,我们根据上述原理,得出如下规律:
上述过程中,我们既可以把有符号的byte转换成无符号的byte(用int类型存储),也可以把有符号但可能超出byte范围的数据转换成有符号的byte。
- Java中byte的符号位
- Java中byte的符号位
- Java中byte的符号位
- Java中byte的符号位
- Java中byte的符号位
- Java中byte的符号位
- Java中byte的符号位
- java中int值转化为byte的符号问题
- Java| Java中字节Byte和位Bit的关系
- 获取java byte的无符号数值
- java byte的无符号数值
- 获取java byte的无符号数值
- JAVA byte有无符号数的转换
- java 中 int 与 byte 位运算
- java中byte,short的无符号右移(>>>)的问题
- 对于Thinking In Java中byte,short无符号右移的理解
- java中byte(byte []), int的转换
- Java中的Byte转为无符号的Integer
- 一个VB写的Base64编码/解码程序
- svnserve配置文件详析
- 在Redhat AS4上安装配置svn 1.4(svnserve方式)
- 爱情,不是交易,不需要机会成本
- 关于对SAX,DOM,JAXP,JDOM,DOM4J的一些理解
- Java中byte的符号位
- DIV + CSS 入门
- 书写博客,从此时开始
- 一个发人深思的预言故事
- php导出CSV方法
- 源码下载
- 教你如何将打印稿变成电子稿
- javascript技巧大全
- 征服 Ajax 应用程序的安全威胁