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

  • 相关阅读:
    什么是Servlet
    Linux进程创建、执行和切换过程理解
    java实现验证码登录
    jsp页面如何动态显示当前时间
    java容器的一些存取用法
    java内存的那些事
    eclipse的常用快捷键
    二叉树前序、中序、后序遍历相互求法
    二叉树的遍历
    jsp添加背景音乐
  • 原文地址:https://www.cnblogs.com/cxyxiaobao/p/11966311.html
Copyright © 2011-2022 走看看