标题:测试Java中的long,int基本类型,以及比较
可以先参考blog:补码,反码运算
long c = -2147483648 - 1; //不会自动转型成long,而是相当于算完后,先赋给int的变量,再强转为long 所以c: 2147483647
原因见上blog
完整示例:
没有手动加L/l,则就是int,若将没有加L/l的数字赋给long,则还是相当于将这个数字保存到int类型,再转成long,所以此数字没有在int的范围就算越界了。
@Test
public void test02() {
测试一、一个数赋给long,若此数字后面没有加L/l,则还是int -> long,故此数若超过了int范围,则会出现溢出
int a = -2147483648;
// int a = -2147483649;// int 的文字 2147483649 超出了范围
// long b = -2147483649;// 不会自动转型int 的文字 2147483649 超出了范围 important
long b = -2147483649L;
测试二、两个int类型的相减赋给long,若没有加L/l则还是相当于将结果保存给一个int,再把int赋给long
long c = -2147483648 - 1; //不会自动转型 c: 2147483647
long c2 = -2147483648L - 1L;//c2: -2147483649
long c3 = -2147483648 - 1L;//c3: -2147483649
System.out.println("a: " + a);
System.out.println("b: " + b);
System.out.println("c: " + c);
System.out.println("c2:" + c2);
System.out.println("c3:" + c3);
}
/**
* [-2147483648,2147483647]
* 补码,反码的运算
* @author dell
*
*/
public class TestComplementInverseCode {
@Test
public void test() {
int k = -2147483648;//小于
int k2 = 2147483647;
// long k = -2147483648; //大于
// long k2 = 2147483647;
// if((k2 - k) > 1) {
// System.out.println("大于");
// }else {
// System.out.println("小于");
// }
}
@Test
public void test02() {
int k = -2147483648;//小于
int k2 = 2147483647;
System.out.println("k2 - k:" + (k2 - k));//-1 =>2147483647 +2147483648(这个数表示不了,) => 2147483647 -2147483648 = -1
long n = (long)k2 - k;//大于 将int 强制转成long
long m = 1L;
// if(n > m) {
// System.out.println("大于");
// }else {
// System.out.println("小于");
// }
}
@Test
public void test03() {
int k = 2147483646;//小于,
int k2 = 2147483647;
long n = (long)k2 - k;//大于 将int 强制转成long
long m = 1L;
if(n > m) {
System.out.println("大于");
}else {
System.out.println("小于");
}
}
//long - int 会强制转成long - long
@Test
public void test04() {
int k = -2147483648;//小于
long k2 = -2147483648; //大于
long a = k - 1;//a:2147483647
long b = (k2 - 1);//b:-2147483649
System.out.println("a:" + a);
System.out.println("b:" + b);
}
}