java入门篇3 --- 基本数据类型的运算
Posted 灬
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java入门篇3 --- 基本数据类型的运算相关的知识,希望对你有一定的参考价值。
一、整数
1.运算
java的整数运算遵从基本的四则运算,不再赘述
下面说一下整数的除法得到的结果永远是精确的,也就是除不尽就给你取整,我记得python2的int类型会保留小数,python3之后也只保留整数
另外取余也是使用%,除法如果除数是0,运行时会报错。
注意,整数有范围,如果超出最大的会溢出,感觉像是又重新走了一个循环。请根据需要使用整型的类型,如果数值大于int范围,可以使用long
另外java也支持n++, n+=1语法糖
public class HelloWorld { public static void main(String[] args) { int x = 5 / 3; int y = 5 % 3; int z = 0 % 5; // int m = 5 / 0; // Exception in thread "main" java.lang.ArithmeticException: / by zero int n = 2147483647; System.out.println(n); // 2147483647 n += 1; System.out.println(n); // -2147483648 n += 10; System.out.println(x); // 1 System.out.println(y); // 2 System.out.println(z); // 0 System.out.println(n); // -2147483639 } }
2.移位运算
一般使用>>与<<,淡然也有使用>>>,三个符号的是不带符号的右移运算,符号为会跟着一起动
public class HelloWorld { public static void main(String[] args) { int x = 32; int y = 1; int m1 = x >> 1; int m2 = x >> 2; int m3 = x >> 3; int m4 = x / 2; int m5 = x / 4; int m6 = x / 8; int n1 = y << 1; int n2 = y << 2; int n3 = y << 3; int n4 = y * 2; int n5 = y * 4; int n6 = y * 8; System.out.println(m1 + " " + m4); // 16 16 System.out.println(m2 + " " + m5); // 8 8 System.out.println(m3 + " " + m6); // 4 4 System.out.println(n1 + " " + n4); // 2 2 System.out.println(n2 + " " + n5); // 4 4 System.out.println(n3 + " " + n6); // 8 8 int h = 32; int h1 = h >>> 2; int g = -32; int g1 = g >>> 2; System.out.println(h1); // 8 System.out.println(g1); // 1073741816 } }
从上述例子可以看出,位移结构跟乘除2是一样的,因为位移就是直接在二进制编码上对数字进行左移或者右移的操作,因此位移操作会更快一些。三个>>>的运算直接把符号都移动了,因此在计算负数时,需考虑在内。
3.位运算
位元算就是与、或、非、异或的操作
public class HelloWorld {
public static void main(String[] args) {
int x = 0 & 111;
int x2 = 32 & 64;
int y = 0 | 111;
int z1 = ~111;
int z2 = ~100;
int z3 = ~-100;
int k = 0 ^ 111;
System.out.println(x); // 0
System.out.println(x2); // 0
System.out.println(y); // 111
System.out.println(z1); // -112
System.out.println(z2); // -101
System.out.println(z3); // 99
System.out.println(k); // 111
}
}
从上述例子中可以看出,两个整数进行与的草哦做,其实应该是将位对齐,就是拆解成二进制的,然后进行与的操作,这里只写最后一个字节的
32:... 00001000
64:... 00010000
进行位运算,0&1得0所以最终结果是0
非~操作,经自行测试,这个就是取反并减一
二、浮点数
浮点数只有四则运算,没有其他的位运算之类的东东
另外浮点数因为精度无法控制,因此计算的结构有时会有一点点误差,如下所示,因此在比较计算结构时,可以测量计算结果的绝对值是否小于一个很小的数
public class HelloWorld {
public static void main(String[] args) {
double x = 1.0 / 10;
double y = 1 - 9.0 / 10;
double z = 1.0 / 0;
float x1 = 1.0f / 10;
float y1 = 1f - 9.0f / 10;
float z1 = 1.0f / 0;
System.out.println(x); // 0.1
System.out.println(y); // 0.09999999999999998
System.out.println(x1); // 0.1
System.out.println(y1); // 0.100000024
System.out.println(z); // Infinity
System.out.println(z1); // Infinity
}
}
类型提升,从上述中可以看出,如果两个计算的数有一个是政令,那么它会自动提升到浮点型,例如:9.0/10结果是0.1左右,但9/10就是0
浮点数在除以0时不会报错,而是打印Infinity,表示无穷大
当然对于类型间的强转如下
public class HelloWorld { public static void main(String[] args) { double x = 123.12345678; double m = 1.2e10; float y = 1234.1234f; int z = 123456; int x1 = (int) x; int y1 = (int) y; int m1 = (int) m; float z1 = (float) z; double z2 = (double) z; System.out.println(x1); // 123 System.out.println(y1); // 1234 System.out.println(m1); // 2147483647 System.out.println(z1); // 123456.0 System.out.println(z2); // 123456.0 } }
在这里面可以发现,浮点数在转化为整型是,小数位数会被抛弃,不遵从四舍五入,因此以后再将浮点数转化为整型时,记得加上0.5
另外,转化为整型时,如果溢出,则会去整型的最大值
三、布尔运算
布尔运算基本都一样,上一篇将boolean时,已经列举过boolean值的获取
boolean的短路运算就是如果是&的计算,第一个条件为false时,则结果直接为false,这个其他语法一致;
另外一个就是三元运算符,这个go就不支持,python支持,js也支持,这个语法糖很好用,go不支持,在写的时候,就感觉少了点东西
下述就是判断条件?结果一:结果二,如果判断条件为真,则返回结果一,否则返回结果二。
public class HelloWorld { public static void main(String[] args) { int x = 3 > 5 ? 3 : 5; System.out.println(x); // 5 } }
以上是关于java入门篇3 --- 基本数据类型的运算的主要内容,如果未能解决你的问题,请参考以下文章