解决方案 »
- java之路学习规划
- java.net.BindException: Address already in use: Cannot bind
- Java写入中文到文件出现乱码,如何解决?
- JAVA基础算法求教!
- 怎么调用其它类的公有变量(2个类是同一个包里面的)
- 关于使用jdom解析xml的一个问题,麻烦各位GGJJ帮忙看一下,谢谢!!!
- 如何装一个String变量内容下载到客户端文件
- Java的函数参数有个数的限制吗?
- 如何将数字变成String型?
- UTF-8古怪问题,请高手帮忙解答,分不够再加。
- java awt 编程中相对路径问题
- swing是否可以实现SWT中StackLayout的效果?或多组件堆叠,控制某个组件的显示或隐藏,如何实现?
而是byte符号扩展转换到int,然后再从int转换到char。
b在内存中是以补码的形式存贮的:
1001 1100如果执行char c=(char)b;
如3楼企鹅先生所说:b要先变为int,这时增加的位全要用b的符号位填充(这就是符号扩展),变为:
1111 1111 1111 1111 1111 1111 1001 1100下步是强制类型转换,只保留了最低的两个字节:1111 1111 1001 1100。如果执行char c=(char)(b&0xff),同样b要转为int ,同时符号位扩展:
1111 1111 1111 1111 1111 1111 1001 1100再与0xff想与,
1111 1111 1111 1111 1111 1111 1001 1100
&0000 0000 0000 0000 0000 0000 1111 1111
-----------------------------------------
0000 0000 0000 0000 0000 0000 1001 1100
再强转为char,得: 0000 0000 1001 1100。这是一个正数。