java中的位运算及移位运算

为了方便对二进制位进行操作,Java给我们提供了以下四个二进制位操作符:

&    按位与

|     按位或

^    按位异或

~    按位取反



Java中有三个移位运算符:

左移:<<                        丢弃最高位,0补最低位;num << 1,相当于num乘以2

带符号右移:>>               符号位不变,左边补上符号位;num >> 1,相当于num除以2

无符号右移:>>>             忽略符号位,空位都以0补齐;

eg:

数            x             x<<2                 x>>2              x>>>2

17      00010001    00¦01000100      00000100¦01     00000100¦01

-17     11101111    11¦10111100      11111011¦11     00111011¦11

时间: 2024-08-01 22:46:41

java中的位运算及移位运算的相关文章

java中的位运算

刚才在imooc看php基础发现一个特别容易让我们理解的描述[关于异或运算的] 之前学习java的时候 位运算有4种,当时是这样记录的: &  按位与 (and) 两个对应二进制都为1则为1,其余全为0 |   按位或(or) 两个二进制数有一个为1则为1,只有两个0才为0 ~  按位非(NOT) 二进制中取反 ^  按位异或(XOR) 两个二进制中相同为则为0,不同则为1             其实最难以理解的就是这个异或运算. 直接搬过来(原网址点我): 我们可以从投票的角度来理解逻辑运算

java中小数的处理:高精度运算用bigDecimal类,精度保留方法,即舍入方式的指定

一. 计算机的小数计算一定范围内精确,超过范围只能取近似值: 计算机存储的浮点数受存储bit位数影响,只能保证一定范围内精准,超过bit范围的只能取近似值. java中各类型的精度范围参见:http://blog.csdn.net/longshenlmj/article/details/47616481 编程时注意: doulbe类型的数,不能用等号判定是否相等(或者是一定范围内可以).因为两次同样的计算(除法)结果可能出现小数部分不同.甚至极端的时候,初始化两个小数时,都可能不相等(用数值和字

Java中关于位运算的面试题

位运算的效率是最高的,因为位位运算是直接对二进制进行操作 位运算只能应用于整型和char类型(char类型可以看做是特殊的无符号的整形) 面试题: a: 判断一个数是否是奇数 a & 1 == 1; b: 对2 ^ n 取余. a & (2^n - 1); c: 如何判断一个数是否是2^n a & (a-1) == 0: d: 两个整数之间的交换: e: 用最有效率的方式求2 * 8的值 2 << 3; a: 判断一个数是否是奇数 a & 1 == 1; /*

java中通过位运算实现多个状态的判断

通过 <<  |  & ~ 位运算,实现同时拥有多个状态 通过 << 定义数据的状态 public interface LogConstants { /** * 消耗标记 */ short COST_ASSET = 1 << 0; short COST_GOLD = 1 << 1; short COST_BINDGOLD = 1 << 2; short COST_SOPH = 1 << 3; short COST_STRSOU

深入理解计算机系统(2.8)---浮点数的舍入,Java中的舍入例子以及浮点数运算(重要)

本文转载地址:http://www.cnblogs.com/zuoxiaolong/p/computer12.html 前言 上一章我们简单介绍了IEEE浮点标准,本次我们主要讲解一下浮点运算舍入的问题,以及简单的介绍浮点数的运算. 之前我们已经提到过,有很多小数是二进制浮点数无法准确表示的,因此就难免会遇到舍入的问题.这一点其实在我们平时的计算当中会经常出现,就比如之前我们提到过的0.3,它就是无法用浮点小数准确表示的. 为此LZ专门写了一个小程序,使用Java语言打印出了0.3的二进制表示,

Java中有关日期的一些常见运算与应用(Date,DateFormat,SimpleDateFormat)

1 import java.text.DateFormat; 2 import java.text.SimpleDateFormat; 3 import java.util.Date; 4 import java.util.Calendar; 5 import java.util.GregorianCalendar; 6 7 public class Oct_18_TimeAndDateFormat { 8 9 public static void main(String[] args) { 1

java中的位运算符

运算符 结果 - 按位非(NOT)(一元运算) & 按位与(AND) | 按位或(OR) ^ 按位异或(XOR) >>     "有符号"右移运算 符,将运算符左边的对象向右移动运算符右边指定的位数.使用符号扩展机制,也就是说,如果值为正,则在高位补0,如果值为负,则在高位补1 << 左移运算符,将运算符左边的对象向左移动运算符右边指定的位数(在低位补0 >>>   "无符号"右移运算 符,将运算符左边的对象向右移动

java中的无符号移位运算

1. 无符号右移   >>>  或 >>> = 无符号右移(>>>)跟右移(>>)运算符不一样. 右移不改变数的正负. 对于一个正数,无符号右移不会变成负数(相当于除以1再取整):但是对于一个负数,无符号右移会将负数变成正数: int i = -4; System.out.printf("%-10d %32s\n", i, Integer.toBinaryString(i)); i >>>= 1;  /

移位运算、Arrays中的copyOf、java.util.AbstractCollection、linux命令之tail

移位运算:http://www.cnblogs.com/hongten/p/hongten_java_yiweiyunsuangfu.html. ---------- Arrays中的copyOf: ----------------------- jdk1.8源码之java.util.AbstractCollection : http://www.cnblogs.com/0xcafebabe/p/6659515.html, http://www.cnblogs.com/leipeng-whale