zoukankan      html  css  js  c++  java
  • Java中的位运算

    1、位运算的优点

    位运算有着节省时间和空间的优点。

    因为位运算的操作对象是二进制位,对计算机而言是非常简单直接,友好高效的。在简单的低成本处理器上,通常位运算比除法快得多,比乘法快几倍,有时比加法快得多。虽然由于较长的指令流水线和其他架构设计选择,现代处理器通常执行加法和乘法的速度与位运算一样快,但由于资源使用减少,位运算通常会使用较少的功率,所以在一些Java底层算法中,巧妙的使用位运算可以大量减少运行开销。

    ================================================

    2、Java位运算细化划分可以分为按位运算和移位运算,见下表。

    计算方式 计算符号 描述 运算规则
    按位运算 & 两位都为1,那么结果为1
    按位运算 | 有一位为1,那么结果为1
    按位运算 ~ ~0 = 1,~1 = 0
    按位运算 ^ 异或 两位不相同,结果为1
    移位运算 << 左移 各二进制位全部左移N位,高位丢弃,低位补0
    移位运算 >> 右移 各二进制位全部右移N位,若值为正,则在高位插入 0,若值为负,则在高位插入 1
    移位运算 >>>  无符号右移 各二进制位全部右移N位,无论正负,都在高位插入0

    对于计算机而言,万物皆0、1,所有的数字最终都会转换成0、1的表示,有3种体现形式,分别是:原码、反码和补码。

    原码:原码表示法在数字前面增加了一位符号位,即最高位为符号位,正数位该位为0,负数位该位为1.比如十进制的5如果用8个二进制位来表示就是00000101,-5就是10000101。

    反码:正数的反码是其本身,负数的反码在其原码的基础上,符号位不变,其余各个位取反。5的反码就是00000101,而-5的则为11111010。

    补码:正数的补码是其本身,负数的补码在其原码的基础上,符号位不变,其余各位取反,最后+1。即在反码的基础上+1。5的反码就是00000101,而-5的则为11111011。

    结论:那就是在计算机系统中,数字一律用补码来表示、运算和存储。

    3、进制转换

    3.1、十进制转换成二进制

    3.1.1 正整数转二进制

    要点:除二取余,倒序排列,高位补零。

    方法:将正的十进制数除以二,得到的商再除以二,依次类推直至商为0或1时为止,然后在旁边标出各步的余数,最后倒着写出来,高位补零。

    注:计算机内部表示数的字节单位是定长的,如8位,16位,或32位。所以,位数不够时,高位补零。

    如:十进制的6转成8位二进制  应该是  110 前面补充5个0   00000110    

            十进制的5转成8位二进制  应该是  101 前面补充5个0  00000101       

    3.1.2 负整数转二进制

    方法:先将对应的正整数转换成二进制后,对二进制取反,然后对结果再加1。 

    如:十进制的-6转成8位二进制   先是6转成二进制应该是  110 前面补充5个0   00000110   ,然后取反:11111001  再加二进制的1          11111010

            十进制的-5转成8位二进制  先是5转成二进制应该是  101 前面补充5个0  00000101  ,然后取反:11111010  再加二进制的1         11111011

    3.1.3 小数转二进制

    方法:对小数点以后的数×2,取结果的整数部分,然后再用小数部分再×2,再取结果的整数部分……以此类推,直到小数部分为0或者位数足够为止。然后把取的整数部分按先后次序排列,就构成了二进制小数部分的序列。

    注:  如果小数的整数部分有大于0的整数时,将整数转换成二进制,小数转换成二进制,然后加在一起。

    3.2、二进制转换成十进制

    3.2.1 整数二进制转换为十进制

    方法:首先将二进制数补齐位数,首位如果是0就代表是正整数,如果首位是1则代表是负整数。

    若首位是0的正整数,补齐位数以后,将二进制中的位数分别与对应的值相乘,然后相加得到的就为十进制。

    若二进制补足位数后首位为1时,说明是负数,就需要先取反再换算。

    3.2.2 小数二进制转换为十进制

    方法:将二进制中的位数分别与对应的值相乘,然后相加,得到的值即为换算后的十进制。

    不忘初心,相信自己,坚持下去,付诸实施。
  • 相关阅读:
    @ExceptionHandler
    使用Vue.extend实现iview Upload在单文件上传时,拖拽多个文件给出错误提示
    spring 常用的注入方式
    SpringMVC框架
    Redis
    事务的隔离性以及隔离级别
    Qt的获取和安装
    C++ 指针delete 及 指针delete后赋值为NULL
    图形流水线
    freeglut的安装步骤
  • 原文地址:https://www.cnblogs.com/controller666/p/14531601.html
Copyright © 2011-2022 走看看