Java中的位运算
2021-06-08 09:04
标签:设计 架构设计 空间 nbsp 运算 对象 加法 计算机系 说明 1、位运算的优点 位运算有着节省时间和空间的优点。 因为位运算的操作对象是二进制位,对计算机而言是非常简单直接,友好高效的。在简单的低成本处理器上,通常位运算比除法快得多,比乘法快几倍,有时比加法快得多。虽然由于较长的指令流水线和其他架构设计选择,现代处理器通常执行加法和乘法的速度与位运算一样快,但由于资源使用减少,位运算通常会使用较少的功率,所以在一些Java底层算法中,巧妙的使用位运算可以大量减少运行开销。 ================================================ 2、Java位运算细化划分可以分为按位运算和移位运算,见下表。 对于计算机而言,万物皆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 小数二进制转换为十进制 方法:将二进制中的位数分别与对应的值相乘,然后相加,得到的值即为换算后的十进制。 Java中的位运算 标签:设计 架构设计 空间 nbsp 运算 对象 加法 计算机系 说明 原文地址:https://www.cnblogs.com/controller666/p/14531601.html
计算方式
计算符号
描述
运算规则
按位运算
&
与
两位都为1,那么结果为1
按位运算
|
或
有一位为1,那么结果为1
按位运算
~
非
~0 = 1,~1 = 0
按位运算
^
异或
两位不相同,结果为1
移位运算
左移
各二进制位全部左移N位,高位丢弃,低位补0
移位运算
>>
右移
各二进制位全部右移N位,若值为正,则在高位插入 0,若值为负,则在高位插入 1
移位运算
>>>
无符号右移
各二进制位全部右移N位,无论正负,都在高位插入0