网站建站要求,网站开发 认证,如何注册一个免费域名,用php做网站的书籍Java中的0xFFFF是整型#xff0c;在赋值、比较的时候容易引起混淆#xff0c;涉及到符号位、数值大小#xff0c;赋值给什么类型的变量。我今天在编码的时候就遇到了一些困惑。用代码样例的形式记录下来#xff0c;加深理解#xff1a;
package com.thb;public class Tes…Java中的0xFFFF是整型在赋值、比较的时候容易引起混淆涉及到符号位、数值大小赋值给什么类型的变量。我今天在编码的时候就遇到了一些困惑。用代码样例的形式记录下来加深理解
package com.thb;public class Test3 {public static void main(String[] args) {/** 编译器认为0xFFFF作为正数将这个正数赋值给short类型的变量超过了* short类型最大正数表示的范围。* 1加上(short)类型强制转化这个其实是改变了原数数值的大小数值的大小变为1* 也改变了符号位了由正数变为负数了即s变量保存的值是-1 计算机用2的补码保存*/short s (short)0xFFFF;// 打印结果出来是负数(-1)System.out.println(s);// 结果为true因为0xFFFF强制类型转换后变为负数了System.out.println(s (short)0xFFFF);// 结果为false因为s存放的是负数而0xFFFF是正数System.out.println(s 0xFFFF); // s存放的是负数转换为int型的十六进制数s的前面补两个字节的符号位,// 符号位是1所以前面补的两个字节是0xFFFFSystem.out.println(Integer.toHexString(s).toUpperCase());// 0xFFFF是int型正数在int的正数表示范围内所以打印出来数值大小和符号位都没有改变System.out.println(Integer.toHexString(0xFFFF).toUpperCase());System.out.println(---------------------------);// 再举另外一个例子将0xFFFF赋值给int型的变量因为0xFFFF在int型最大正数// 表示的范围内所以原数值大小和符号位都没有改变int ss 0xFFFF; System.out.println(ss);System.out.println(ss 0xFFFF); // 结果为true// ss是正数前面两个字节的符号位都是0System.out.println(Integer.toHexString(ss).toUpperCase()); }
}运行输出