java中运算都是操作符号,那么整形默认为int,双精度默认为都double 整数 看案例:
无法编译通过:操作默认为int,接受结果为int,所以这个地方编译无法通过,所以需要强制类型转换
再看案例:
再看双精度:
这种是可以的,再看
这也是可以的,看结果:
精度损失。再看
结果:
再看多种案例:
看结果:
再看案例 :
看结果
那么会什么会出现这么多问题呢,原因 在数据结果,转为二进制的时候,比如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类型来操作精度。避免精度损失
| ^ & 运算解析: 看案例:
看结果:
这是为什么呢。 分析 第一个为或运算,第二个为与运算,第三个为亦或预算 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
位运算 看案例:
一个是左移,一个是右移 1 二进制 0000 0001 向右移 3位 所以 0000 0000 所以结果为0 左移 0000 1000 所以为 8 再看案例:
9的二进制为 0000 1001 左移移动 0100 1000 结果为2e6+2e3=64+8=72 计算规则是这样的,首先最后一个为2的0次方,那么第七位就为2的6次方,第四位就为2的3方法 右移 0000 0001 所以结果为1
2 0次方 = 1; 2 1次方 = 2; 2 2次方=4; 2 3次方=8; 2 4次方 = 16; 2 5次方=32; 2 6次方=64; 2 7次方=128; 2 8次方=256; 2 9次方=512; 2 10次方=1024;
|
|
来自: hongjing_z > 《Java》