zoukankan      html  css  js  c++  java
  • java中的运算,+-* /% | ^ & >>

    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

  • 相关阅读:
    程序员的7中武器
    需要强化的知识
    微软中国联合小i推出MSN群Beta 不需任何插件
    XML Notepad 2006 v2.0
    Sandcastle August 2006 Community Technology Preview
    [推荐] TechNet 广播 SQL Server 2000完结篇
    《太空帝国 4》(Space Empires IV)以及 xxMod 英文版 中文版 TDM Mod 英文版 中文版
    IronPython 1.0 RC2 更新 1.0.60816
    Microsoft .NET Framework 3.0 RC1
    《Oracle Developer Suite 10g》(Oracle Developer Suite 10g)V10.1.2.0.2
  • 原文地址:https://www.cnblogs.com/cxyxiaobao/p/11966311.html
Copyright © 2011-2022 走看看