我看一个有名的开源组件,用到byte--->char代码是这样的:
c[i] = (char) (b[i] & 0xff) (b[i]为byte型,c[i]为char型)
觉得与一下0xff没什么用。直接c[i] = (char)b[i]有何异?
c[i] = (char) (b[i] & 0xff) (b[i]为byte型,c[i]为char型)
觉得与一下0xff没什么用。直接c[i] = (char)b[i]有何异?
解决方案 »
- java 服务器中mysql问题
- 如何在页面上对table进行排序
- 关于import的菜鸟问题
- 如何对使用单例模式的类进行同步?
- 请教各位高手!急!关于缓存的。
- 你有没有好的想法?
- 归来献礼:最容易配置的免费的java applicationserver+webserver+Database是什么?
- 怎样把char转换成byte数组?给分117!!!!!!!!!!!!!!
- 怎样在Java环境(不用Applet)中播放声音
- java.util.NoSuchElementException: Vector Enumeration 求大神帮忙,在线急等
- java 有没有静态类???菜鸟提问。。。
- 如何查看jdk中的源代码
&0000 0000 1111 1111
-----------------
=0000 0000 1010 1100So as you can see, 0xFF is often used to to isolate a byte in an integer, by truncating the integer to one byte's worth of 1's.For more information, see this WP article:
char d = (char)-1;
System.out.println((int)c);
System.out.println((int)d);
这样输出是 255
65535
上面代码就是为了避免错误
1)。位运算符只针对4byte的int型
2)。-2的byte类型 16进制表示为 FE(2取反加1)
3)。-2 & 0xFF运算: 实际-2带符合bit-wise成int,即FE会变成FFFFFFFE(2取反加1), 接着
0xFFFFFFFE & 0x000000FF = 0x 000000FE; 如果不&,就是FFFFFFFE。
2)
3) 负数进行&操作时需要转成补码,-2 的补码是0xFFFFFFFE
java中的數值是int,所以0xFF是int,而byte是有符號數,int亦然,直接由byte升為int,符號自動擴展,而進行了& 0xFF後,就把符號問題忽略掉了,將byte以純0/1地引用其內容,所以要0xFF,不是多餘的,你用一些Stream讀取文件的byte就知道了,我昨天搞了一天,就不明白為什麼讀出來的數某些byte會在移位後錯誤的,就是因為這個原因.
java中的數值是int,所以0xFF是int,而byte是有符號數,int亦然,直接由byte升為int,符號自動擴展,而進行了& 0xFF後,就把符號問題忽略掉了,將byte以純0/1地引用其內容,所以要0xFF,不是多餘的,你用一些Stream讀取文件的byte就知道了,我昨天搞了一天,就不明白為什麼讀出來的數某些byte會在移位後錯誤的,就是因為這個原因.