java中-/_java中的运算,+-* /% | ^ &

java中运算都是操作符号,那么整形默认为int,双精度默认为都double

整数

看案例:

d0892b4f4f1049d5fc3da550080073e0.png

无法编译通过:操作默认为int,接受结果为int,所以这个地方编译无法通过,所以需要强制类型转换

2b8488d8fc83cf1b8519aea37efbac32.png

再看案例:

95eb8b1747d9e1202b9bddc887331125.png

6342a3c39f023bfe1d0ca2383e9a236c.png

再看双精度:

7584ec32759f4594288a55fdfb9a2a33.png

这种是可以的,再看

f9b784385d3bb5b4b7a33ca69415773f.png

这也是可以的,看结果:

7873ca3d92732a120d1fec19feed706b.png

精度损失。再看

f30f5a749dda6ff5013443e317e50ef3.png

结果:

e8d74ed599fcdc39b61a8e43889f13cb.png

再看多种案例:

d691d89db24ac9c8580d3e68e5f38505.png

看结果:

63f3c53b16725e3d395cb428d3b1d85a.png

再看案例 :

5a2f9da4f66a9e6b839e8bb54fa83812.png

看结果

d49f790ded097041db45ba2406c59c56.png

那么会什么会出现这么多问题呢,原因

在数据结果,转为二进制的时候,比如0.3  转换为二进制如这么转换的

0.3*2->0.6->0.6*2>1.2   二进制为1

将小数点后面的0.2继续进行

0.2*2》0.4>0.8>1.6>二进制为1

再进行

0.6*2》1.2 二进制1 再进行

0.2 *2》0.4》0.8》1.6 如此循环下去,导致最后会进行精度损失,

所以如果项目中要有这样的,所以需要进行采用dicmal类型来操作精度。避免精度损失

| ^ & 运算解析:

看案例:

25d238760ced86dd5f495c3409146c41.png

看结果:

ddd626a33c52234282baa26fa80eea95.png

这是为什么呢。

分析

第一个为或运算,第二个为与运算,第三个为亦或预算

3转化为二进制的  0000 0011

1转为二进制         0000 0001

或,只要其中一个为正确那么就正确,在进行运算的时候,只要其中一个为1,那么就为1

所以 1|3   结果为0000 0011  即结果为3

与 只要两个都正确,那么正确,在运算中只要两个相同就为1,另外为0

1&3  结果为0000 0001  所以结果为1

亦或 只要两个不同才正确,所以计算时候,只有两个不同才为1,另外为0

1^3  结果0000 0010 所以结果为2

位运算

看案例:

7ec05eeeb0751b5ba54dbe3ecf70eacf.png

一个是左移,一个是右移

1 二进制 0000 0001   向右移 3位 所以 0000 0000 所以结果为0

左移 0000 1000 所以为 8

再看案例:

2770ef9fcdbcce26297741518fd5bd11.png

9的二进制为 0000 1001

左移移动 0100 1000 结果为2e6+2e3=64+8=72     计算规则是这样的,首先最后一个为2的0次方,那么第七位就为2的6次方,第四位就为2的3方法

右移 0000 0001 所以结果为1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值