首页 > 作文

Java基础教程之整数运算

更新时间:2023-04-06 02:22:25 阅读: 评论:0

引言

java的整数运算遵循四则运算规则,可以使用任意嵌套的小括号。四则运算规则和初等数学一致。例如:

输出

3300
23072

整数运算的数值不但是精确的,而且整数运算永远是精确的,即使是出发,因为两个整数相除只得到结果的整数部分,不进行四舍五入

求余运算

整数除法对于被除数为0运行时报错,但编译时不报错

溢出

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

运行结果

-2147483641

要解释上述结果,我们把整数2147483640和15换成二进制做加法

0111 1111 1111 1111 1111 1111 1111 1000

+ 0000 0000 0000 0000 0000 0000 0000 1111

1000 0000 0000 0000 0000 0000 0000 0111

由于最高位计算结果为1,因此加法结果变成了一个负数

要解决上面的文件,可以把int换成long类型,由于long可表示的整型范围更大,所以结果不会溢出

还有一种简写的运算符,即+=,-=,*=,/=,使用方法如下

自增/自减

java还提供了++运算和–运算,它们可以对一个整数进行加1和减1的操作:

注意++写在前面和后面计算结果是不同的,++n表示先加1再引用n,n++表示先引用n再加1。不建议把++运算混入到常规运算中,容易自己把自己搞懵了。

移位运算

在计算机中,整数总是以二进制的形式表示。例如,int类型的整数7使用4字节表示的二进制如下:

00000000 00000000 00000000 00000111

可以对整数进行移位运算。对整数7左移1位将得到整数14,左移2位将得到整数28

左移29位时,由于最高位变成了1,因此结果变成了负数

类似地对证书7进行右移结果如下

如果对一个负数进行右移,最高位1不动,结果仍然是一个负数

还有一种不带符号的右移运算,使用>>>,它的特点是符号位跟物流管理就业方向着动,因此,对一个负数进行>>>右移,它会变成正数,原因是最高位的1变成了0:

对byte和short类型进行位移时,会首先转换为int再进行位移

左移实际上就是不断地*2,右移实际上就是不断地/2

位运算

位运算是按位进行与,或,非和异或的运算。

与运算的规则是,必须两个数同时为1,结果才为1

或运算的规则是,只要任意一个为1,结果就为1

非运算的规则是,0和1呼唤

异或运算的规则是,如果两个数不同,结果为1,否则为0

对于两个整数的运算,实际上就是按位对齐,然后依次对每一位进行运算。例如

运行结果

167776512

上述按位与运算实际上可以看作两个整数表示的ip地址10.0.17.7710.0.17.0,通过与运算,可以快速判断一个ip是否在给定的网段内。

运算优先级

在java的计算表达式中,运算优先级从高到低依次是:

()!~++—*/%+–<<>>>>>&|+=-=*=/=

记不住也没关系,只需要加括号就可以保证运算的优先级正确。

类型的自动提升与强制转型

在运算过程中,如果参与运算的两个数类型不一致,那么计算结果为较大类型的整型。例如,short和i林中文nt计算,结果总是int,原因是short首先自动被转型为int:

也可以将结果强制转型,即将大范围的整数转型为小范围的整数广东海滩。强制转型使用(类型),例如,将int强制转型为short:

超出范围的强制转型会得到错误的结果,原因是转型时,int的两个高位直接直接被扔掉,仅保留了低位的两个字节。

举例说明

结果

-10617
24910

为什么结果是-10617和24910呢

首先把1234567转换成二进制并且使用8位分割成4份

00000000 00010010 11010110 10000111‬

强制转换成short类型或高位被抛弃留下低位两个字节

11010110 10000111

最高位为1是负数,负数是以补码的形式存储在计算机内需要转换成原码

原码等于补码-1后除符号位取反

补码-1结果

11010110 10000110

除符号位取高考作文素材摘抄反得到原码

10101001 01111001

最高位为1所以是负数101001 01111001即-10617

同理计算12345678去掉高两位后剩下的最高位为0是正数则补码和原码是一样的

练习

计算自然数之和

小结

整数运算的结果永远都是精确的

运算结果会自动提升

可以强制转型,但超出范围的强制转型会得到错误的结果

应该选择合语言艺术适范围的整型(int或long),没有必要为了节省内存而使用byte和short进行整数运算。

总结

到此这篇关于java基础教程之整数运算的文章就介绍到这了,更多相关java整数运算内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

本文发布于:2023-04-06 02:22:23,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/a49b84e1191ce0642639e4b38faf9695.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:Java基础教程之整数运算.doc

本文 PDF 下载地址:Java基础教程之整数运算.pdf

标签:整数   负数   高位   补码
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图