码迷,mamicode.com
首页 > 编程语言 > 详细

java入门篇3 --- 基本数据类型的运算

时间:2020-01-06 17:57:50      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:报错   一个   结构   取整   遵从   基本数据   负数   thread   数字   

一、整数

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 --- 基本数据类型的运算

标签:报错   一个   结构   取整   遵从   基本数据   负数   thread   数字   

原文地址:https://www.cnblogs.com/yangshixiong/p/12157373.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!