(int)(char)(byte)-1具体是怎么换算的? 如题 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 首先 -1 是int类型。然后是(byte)-1 得到byte类型的 -1,(char)((byte)-1)得到char类型的-1,最后(int)((char)((byte)-1))将char转换成 int。 理解2点:1。char类型向表示范围比它大的类型转换时使用的是0扩展,也就是说在高位补0。2。byte类型转换为char类型其实是2步:先把byte提升为int,再把int转化为char(去掉高位) 按照java语法中运算符的结合顺序进行吧,另外lz可以写个实例,编译出来,然后用IDA反编译,可以看到一些奇怪的“汇编”。。 为什么要先将byte提升为int?更具点是怎么换算的?byte(-1)的2进制 1000 0001提升为int 为 1000 0000 0000 0000 0000 0000 0000 0001int转化为char 0000 0000 0000 0001char转化为int 0000 0000 0000 0000 0000 0000 0000 0001得出结果为1但是运行的结果是65535啊 答:为什么要先将byte提升为int? 更具点是怎么换算的? byte(-1)的2进制 1000 0001 错 ==> 应 11111111提升为int 为 1000 0000 0000 0000 0000 0000 0000 0001 错应:1111 1111 1111 1111 1111 1111 1111 1111因此:int转化为char 1111 1111 1111 1111char转化为int 0000 0000 0000 0000 1111 1111 1111 1111 得出结果为 65535啊 不换算,编译的时候直接抓int来用 java采用补码byte(-1)的2进制的补码 1111 1111提升为int不是给高位补0吗,为什么是补1啊 (byte)-1 : -1 // byte 范围是 0-127(char)(byte)-1 : ? // char 范围是 '\u0000' 至 '\uffffff' (0 - 65535)(int)(char)(byte)-1 : 65535 (byte)-1 : [B@35ce36整型数-1二进制表示为:11111111111111111111111111111111(char)(byte)-1 : [B@757aef整型数65535二进制表示为:00000000000000001111111111111111(int)(char)(byte)-1 : [B@d9f9c3整型数65535二进制表示为:00000000000000001111111111111111public class Overload { public static void main(String args[]) { System.out.println("(byte)-1 : " + (""+(byte)-1).getBytes()); IntToBin((byte)-1); System.out.println("(char)(byte)-1 : " + (""+(char)(byte)-1).getBytes()); IntToBin((char)(byte)-1); System.out.println("(int)(char)(byte)-1 : " + (""+(int)(char)(byte)-1).getBytes()); IntToBin((int)(char)(byte)-1); } static void IntToBin(int x) { System.out.println("\n整型数"+x+"二进制表示为:"); for(int i = 31;i >= 0;i--) { if(((1<<i) & x) != 0) System.out.print("1"); else System.out.print("0"); } System.out.println(); } } 应该是这样的byte(-1)自动类型提升java采用补码 所以byte(-1)的补码为1111 1111 1111 1111 1111 1111 1111 1111后面的就是1。char类型向表示范围比它大的类型转换时使用的是0扩展,也就是说在高位补0。 2。byte类型转换为char类型其实是2步:先把byte提升为int,再把int转化为char(去掉高位)结贴 关于HttpClient请求https网页??? IO读取文件..内容变了 急!!!帮忙看看问题出在哪,小女子先在此拜谢! 请教一下那里有好点的jsp 的论坛和网站 不好意思,第一次接项目,没什么经验,大家帮我看看, 用SOCKET传输数据的问题?(急急急) 高分求助(50) 请问在classpath中如何将weblogic加入。 实现b/s模式的ERP系统?应该使用java中的那些技术? 90分求一点js解释器资料! 急 eclipse 里面添加注释的问题 issue:initialize by final method
然后是(byte)-1 得到byte类型的 -1,
(char)((byte)-1)得到char类型的-1,
最后(int)((char)((byte)-1))将char转换成 int。
1。char类型向表示范围比它大的类型转换时使用的是0扩展,也就是说在高位补0。
2。byte类型转换为char类型其实是2步:先把byte提升为int,再把int转化为char(去掉高位)
更具点是怎么换算的?
byte(-1)的2进制 1000 0001
提升为int 为 1000 0000 0000 0000 0000 0000 0000 0001
int转化为char 0000 0000 0000 0001
char转化为int 0000 0000 0000 0000 0000 0000 0000 0001
得出结果为1
但是运行的结果是65535啊
为什么要先将byte提升为int?
更具点是怎么换算的?
byte(-1)的2进制 1000 0001 错 ==> 应 11111111
提升为int 为 1000 0000 0000 0000 0000 0000 0000 0001 错
应:1111 1111 1111 1111 1111 1111 1111 1111
因此:int转化为char 1111 1111 1111 1111
char转化为int 0000 0000 0000 0000 1111 1111 1111 1111
得出结果为 65535啊
byte(-1)的2进制的补码 1111 1111
提升为int不是给高位补0吗,为什么是补1啊
(char)(byte)-1 : ? // char 范围是 '\u0000' 至 '\uffffff' (0 - 65535)
(int)(char)(byte)-1 : 65535 (byte)-1 : [B@35ce36
整型数-1二进制表示为:
11111111111111111111111111111111(char)(byte)-1 : [B@757aef
整型数65535二进制表示为:
00000000000000001111111111111111(int)(char)(byte)-1 : [B@d9f9c3
整型数65535二进制表示为:
00000000000000001111111111111111
public class Overload {
public static void main(String args[]) {
System.out.println("(byte)-1 : " + (""+(byte)-1).getBytes());
IntToBin((byte)-1);
System.out.println("(char)(byte)-1 : " + (""+(char)(byte)-1).getBytes());
IntToBin((char)(byte)-1);
System.out.println("(int)(char)(byte)-1 : " + (""+(int)(char)(byte)-1).getBytes());
IntToBin((int)(char)(byte)-1);
}
static void IntToBin(int x)
{
System.out.println("\n整型数"+x+"二进制表示为:");
for(int i = 31;i >= 0;i--)
{
if(((1<<i) & x) != 0)
System.out.print("1");
else
System.out.print("0");
}
System.out.println();
}
}
java采用补码 所以byte(-1)的补码为1111 1111 1111 1111 1111 1111 1111 1111
后面的就是1。char类型向表示范围比它大的类型转换时使用的是0扩展,也就是说在高位补0。
2。byte类型转换为char类型其实是2步:先把byte提升为int,再把int转化为char(去掉高位)结贴