Java-数值类型的运算方式总结

基本数据类型

基本数据类型是cpu可以直接进行运算的数据类型,在JVM的栈中分配内存空间

基本数据类型分为六种:

数值型:

  • 整数类型:byte(1字节),short(2字节),int(4字节),long(8字节)
  • 浮点数类型:float(4字节),double(8字节)

非数值型:

  • 字符类型:char(2字节)
  • 布尔类型:boolean

整数运算

整数运算遵循四则运算规则,可以任意嵌套小括号

算数运算符包括:+(加)  -(减)  ×(乘)  /(除)  %(取余)

四则运算规则与数学运算规则一致

溢出

由于整数存在范围限制,如果计算结果超出了范围,就会产生溢出,而溢出不会显示出错,会得到一个奇怪的结果

例:

public class demo04 {public static void main(String[] args) {int a=2147483640;int b=3456;int sum=a+b;System.out.println(sum);//运算结果:-2147480200}
}

整数溢出问题的解决:

        解决上面的问题,可以将int转换为范围更大的long型,而当整数的范围仍超过long时,可以将这个数封装成Biginteger对象。但是,因为不是基本数据类型,所有不能使用四则运算法则,要使用Biginteger中的add(),substract(),mutiply(),divide()方法。

public class demo04 {public static void main(String[] args) {long a=2147483640;long b=3456;long sum=a+b;System.out.println(sum);//运算结果:2147487096}
}
import java.math.BigInteger;
public class demo04 {public static void main(String[] args) {BigInteger a=new BigInteger("2147483640");BigInteger b=new BigInteger("3456");BigInteger sum=new BigInteger("0");sum=a.add(b);System.out.println(sum);//运算结果:2147487096}
}

位运算

位运算时按照整数的二进制进行移位,与,或,非,异或的运算。应用于整数类型和字节型等数据类型(浮点型不能进行位运算)。由于位运算直接采用二进制进行计算,所有往往可以计算性能的提升

常见的位运算使用场景

位运算符运算规则
<<(左移运算)相当于乘以2^{位移数}
>>(右移运算)相当于除以2^{位移数}
&(与运算)两个数同时为1,结果为1
|(或运算)只要任意一个为1,结果为1
~(非运算)0和1互换
^(异或运算)两个数相同为1,不同为0

 位运算实例:

public class demo04 {public static void main(String[] args) {int n=7;//位运算:int a=n<<1;//相当于7乘2的1次方int b=n<<2;//相当于7乘2的2次方int c=n<<27;//相当于7乘2的27次方int d=n<<28;//相当于7乘2的28次方System.out.println(a);//运算结果:14System.out.println(b);//运算结果:28System.out.println(c);//运算结果:939524096System.out.println(d);//运算结果:1879048192}
}
public class demo04 {public static void main(String[] args) {int n = 28;// 位运算:int a = n >> 1;// 相当于7除以2的1次方int b = n >> 2;// 相当于7除以2的2次方int c = n >> 3;// 相当于7除以2的3次方System.out.println(a);// 运算结果:14System.out.println(b);// 运算结果:7System.out.println(c);// 运算结果:3}
}
public class demo04 {public static void main(String[] args) {//&(与运算)int i=167776589;//00001010 00000000 00010001 01001101int k=167776512;//00001010 00000000 00010001 00000000int x=i&k;      //00001010 00000000 00010001 00000000System.out.println(x);//167776512//|(或运算)int a=167776589;//00001010 00000000 00010001 01001101int b=167776512;//00001010 00000000 00010001 00000000int c=a|b;      //00001010 00000000 00010001 01001101System.out.println(c);//37273//~(非运算)int m=167776589;//00001010 00000000 00010001 01001101int n=~m;       //11110101 11111111 11101110 10110010System.out.println(n);//-167776590//^(异或运算)int g=167776589;//00001010 00000000 00010001 01001101int l=167776512;//00001010 00000000 00010001 00000000int v=g^l;      //00000000 00000000 00000000 01001101System.out.println(v);//77//用异或交换两数int w=3;int e=4;w=w^e;e=w^e;w=w^e;System.out.println(w);//4System.out.println(e);//3}
}

浮点数运算

浮点数精度丢失

计算机使用二进制进行存储数据,而浮点数是由整数部分和小数部分组成,而小数部分无法由二进制精确表示。所以会出现浮点数精度丢失问题

解决方法

可以使用BigDecimal

注意:BigDecimal是有参构造方法,括号中可以传入float,double类型数据,也可以传入String类型,但是传入float,double类型数据还是会产生精度丢失,所以必须传入String类型参数,避免精度丢失

例:

public class demo03 {public static void main(String[] args) {BigDecimal a=new BigDecimal("3.2");BigDecimal b=new BigDecimal("0.6");System.out.println(a.add(b));//3.8}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/479500.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络原理HTTP/HTTPS(2)

文章目录 HTTP响应状态码200 OK3xx 表示重定向4xx5xx状态码小结 HTTPSHTTPS的加密对称加密非对称加密 HTTP响应状态码 状态码表⽰访问⼀个⻚⾯的结果.(是访问成功,还是失败,还是其他的⼀些情况…).以下为常见的状态码. 200 OK 这是⼀个最常⻅的状态码,表⽰访问成功 2xx都表示…

OpenCV 4基础篇| 色彩空间类型转换

目录 1. 色彩空间基础2. 色彩空间类型2.1 GRAY 色彩空间2.2 BGR 色彩空间2.3 CMY(K) 色彩空间2.4 XYZ 色彩空间2.5 HSV 色彩空间2.6 HLS 色彩空间2.7 CIEL*a*b* 色彩空间2.8 CIEL*u*v* 色彩空间2.9 YCrCb 色彩空间 3. 类型转换函数3.1 cv2.cvtColor3.2 cv2.inRange 1. 色彩空间…

【RL】Value Function Approximation(值函数逼近)

Lecture 8: Value Function Approximation Algorithm for state value estimation Objective function 令 v π ( s ) v_{\pi}(s) vπ​(s)和 v ^ ( s , w ) \hat{v}(s, w) v^(s,w)是真实state value和近似函数。 算法的目标是找到一个最优的 w w w&#xff0c;使得 v ^ …

echats 时间直方图示例

需求背景 某订单有N个定时任务&#xff0c;每个任务的执行时间已经确定&#xff0c;希望直观的查看该订单的任务执行趋势 查询SQL&#xff1a; select UNIX_TIMESTAMP(DATE_FORMAT(exec_time,%Y-%m-%d %H:%i)) execTime, count(*) from order_detail_task where order_no 2…

【力扣白嫖日记】1873.计算特殊奖金

前言 练习sql语句&#xff0c;所有题目来自于力扣&#xff08;https://leetcode.cn/problemset/database/&#xff09;的免费数据库练习题。 今日题目&#xff1a; 1873.计算特殊奖金 表&#xff1a;Employees 列名类型employee_idintnamevarcharsalaryint employee_id 是…

Fisher-Yates乱序算法

乱序算法 public class Test07 {public static void main(String[] args) {//乱序算法int[] arr {1,2,3,4,5,6,7,8};//逆序遍历 且这个随机的下标不能使要交换的元素的本身for(int i arr.length-1;i>0;i--){//产生一个随机的下标与当前元素进行交换int index (int)(Math…

内网穿透的应用-使用Docker部署TeslaMate并结合内网穿透实现远程访问车辆数据

文章目录 1. Docker部署TeslaMate2. 本地访问TeslaMate3. Linux安装Cpolar4. 配置TeslaMate公网地址5. 远程访问TeslaMate6. 固定TeslaMate公网地址7. 固定地址访问TeslaMate TeslaMate是一个开源软件&#xff0c;可以通过连接特斯拉账号&#xff0c;记录行驶历史&#xff0c;统…

谈谈:你在工作中用到的设计模式!

谈谈:你在工作中用到的设计模式! Hello大家龙年好! 春节的假期转眼间过去,我们也要回归往日的节奏 因为最近和小伙伴们聊天发现,我们普遍在面试中,对被问起设计模式在工作中的应用,既有点熟悉,又有点陌生, 在网上看吧,又感觉鸡肋(为啥?不能解燃煤之急啊!哈哈),所以,为了打破这…

尚硅谷ES基础 - RESTful JSON基本概念倒排索引HTTP

RESTful & JSON REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。 Web 应用程序最重要的 REST 原则是&#xff0c;客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。…

CSS3盒子模型

盒子模型&#xff08;Box Modle&#xff09;可以用来对元素进行布局&#xff0c;包括内边距&#xff0c;边框&#xff0c;外边距&#xff0c;和实际内容部分 盒子模型分为两种: 第一种是 W3C 标准的盒子模型&#xff08;标准盒模型&#xff09; 第二种 IE 标准的盒子模型&am…

爬虫入门一

文章目录 一、什么是爬虫&#xff1f;二、爬虫基本流程三、requests模块介绍四、requests模块发送Get请求五、Get请求携带参数六、携带请求头七、发送post请求八、携带cookie方式一&#xff1a;放在请求头中方式二&#xff1a;放在cookie参数中 九、post请求携带参数十、模拟登…

C++进阶(一) 继承

一、继承的概念及定义 1.1继承的概念 继承(inheritance)机制是面向对象程序设计 使代码可以复用的最重要的手段&#xff0c;它允许程序员在 保持原有类特性的基础上进行扩展&#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称 派生类。继承呈现了面向对象 程序设计…