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
    }
}

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

时间: 2024-11-09 09:43:47

java入门篇3 --- 基本数据类型的运算的相关文章

Java入门2 ---变量,数据类型和运算符

1.变量:变量是存储数据的一个基本单元,不同的变量相互独立. 2.Java数据类型: 1)布尔型: boolean:布尔型,8位,数值范围:true,false 2)字符型: char:字符型,16位,取值范围0~65535, 如'a' 3)数值型: byte:8位,取值范围:-128 -- 127,如12,100,-20 short:16位,取值范围:-32768 -- 32767,如154,-134,1234 int:整型,32位,取值范围:-2147483648 -- 2147483647

Java 入门 代码2浮点数据类型

1 /** 2 * 基本数据类型之浮点类型 3 */ 4 public class DataTypeDemo2 { 5 public static void main(String[] args) { 6 double d1 = 3; 7 System.out.println(d1);//3.0 8 double d2 = 2.4; 9 d1 = d1 - d2; 10 System.out.println(d1);//0.6000000000000001 11 float f1 = 3.0F;

java入门篇4 --- 引用类型

1.String字符串 我们常用的字符串属于引用类型,它可以包含0至n个字符,String使用双引号,字符串的拼接也可以使用+ public class HelloWorld { public static void main(String[] args) { String s = "我爱中国"; String s1 = "i " + "love " + "china"; String s2 = null; // String

java入门篇10 --- 注解

从JVM的角度看,注解本身对代码逻辑没有任何影响,如何使用注解完全由工具决定. Java的注解可以分为三类: 第一类是由编译器使用的注解,例如: @Override:让编译器检查该方法是否正确地实现了覆写: @SuppressWarnings:告诉编译器忽略此处代码产生的警告. 这类注解不会被编译进入.class文件,它们在编译后就被编译器扔掉了. 第二类是由工具处理.class文件使用的注解,比如有些工具会在加载class的时候,对class做动态修改,实现一些特殊的功能.这类注解会被编译进入

java入门篇12 --- IO操作

在jiava中InputStream跟OutputStream分别代表输入流跟输出流,接下来来看一下IO的相关操作 首先来看一下如何操作文件 import java.io.File; import java.io.FilenameFilter; import java.nio.file.Path; import java.nio.file.Paths; public class HelloWorld { public static void main(String[] args) throws

java入门篇11 --- 集合

无论什么语言,集合应当是我们最常用的一种类型啦,大体上分为有序列表.map.sey.队列 首先先来看一下有序列表, List内部跟数组一样也是按照先后顺序排放的,但对于增删,非常方便,list的实现大多是使用ArrayList实现的,先来看一下List的源码,这里面有一个<E>,这个就是泛型,java是面向对象语言,他在运行期间,才会将我们的类进行初始化,因此,就利用这一特性,我们输入指定的引用类型,注意必须是引用类型,基本类型不是类,JVM在编译是,会把它当作object,然后再运行期间就会

redis的入门篇---五种数据类型及基本操作

查看所有的key keys * 清空所有的key flushall 检查key是否存在 exists key 设置已存在的key的时长 expire key 10 //设置key为10s 查看key还剩多少时长 ttl key //-1是永久 -2是不存在 查看key的类型 type key 随机取出一个key randomkey 重命名key rename key newkey //如果key存在 直接覆盖 renamenx key newkey //如果key存在 则失败 返回0 设置一定时

Java工程师学习指南(入门篇)

Java工程师学习指南 入门篇 最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好.原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都是站在Java后端的全局上进行思考和总结的,忽略了很多小白们的感受,而很多朋友都需要更加基础,更加详细的学习路线. 所以,今天我们重新开一个新的专题,分别按照四篇文章讲述Java的学习路线(分别是入门篇,初级篇,中级篇,高级篇),笔者也打算趁此机会,回忆一下自己的Java学习历程.今天我们要讲的是,

ElasticSearch入门 第六篇:复合数据类型——数组,对象和嵌套

这是ElasticSearch 2.4 版本系列的第六篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 ElasticSearch入门 第三篇:索引 ElasticSearch入门 第四篇:使用C#添加和更新文档 ElasticSearch入门 第五篇:使用C#查询文档 ElasticSearch入门 第六篇:复合数据类型——数组,对象和嵌套 在ElasticSearch中,使用JSON结构来存储数据,