Java 中的位移运算

位移运算符就是在二进制的基础上对数字进行平移。按照平移的方向和填充数字的规则分为三种:<<(左移)、>>(带符号右移)和>>>(无符号右移)。

计算规则如下:

①左移n位相当于乘以2的n次方。

②右移n位相当于除以2的n次方。这里是取商哈,余数就不要了。

③ >>>(无符号右移)

运算规则:

按二进制形式把所有的数字向右移动对应位数,低位移出(舍弃),高位的空位补零。对于正数来说和带符号右移相同,对于负数来说不同。 其他结构和>>相似。

示例

[java] view
plain
copyprint?

  1. long a = 0x3;
  2. long b = 30;
  3. long longLeft  = a << b;
  4. System.out.println(longLeft);
  5. System.out.println(0x3 << 30);
  6. System.out.println("-----");
  7. System.out.println(Math.pow(-2, 31));
  8. System.out.println(Integer.MIN_VALUE);
  9. System.out.println("-----");
  10. System.out.println(Math.pow(2, 31) - 1);
  11. System.out.println(Integer.MAX_VALUE);

结果

[plain] view
plain
copyprint?

  1. 3221225472
  2. -1073741824
  3. -----
  4. -2.147483648E9
  5. -2147483648
  6. -----
  7. 2.147483647E9
  8. 2147483647
时间: 2024-10-09 11:48:27

Java 中的位移运算的相关文章

Java中的表达式运算

1.问题背景    以下代码运行的结果为:    A.a的值:8   b的值:7           B.a的值:8  b的值:8    C.a的值:9   b的值:7           D.a的值:9  b的值:8 /** * */ package com.you.model; /** * @author YouHaidong * */ public class AB { /** * @param args */ public static void main(String[] args)

java中的位运算

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

1&lt;&lt;30 hashMap 中使用位移运算的意义

static final int MAXIMUM_CAPACITY = 1 << 30; 计算过程已1<<30为例,首先把1转为二进制数字 0000 0000 0000 0000 0000 0000 0000 0001 然后将上面的二进制数字向左移动30位后面补0得到 01000000 00000000 00000000 00000000(共计32位,是int的最大长度,第一位标示的是符号)即0x4000 0000 java语言要2的n次方咋写呀 Math.pow(2,n). 这里

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

java中的位运算及移位运算

为了方便对二进制位进行操作,Java给我们提供了以下四个二进制位操作符: &    按位与 |     按位或 ^    按位异或 ~    按位取反 Java中有三个移位运算符: 左移:<<                        丢弃最高位,0补最低位:num << 1,相当于num乘以2 带符号右移:>>               符号位不变,左边补上符号位:num >> 1,相当于num除以2 无符号右移:>>>  

JAVA中的数字运算+号与字符串+号

(1)当“+”两边是非数值类型,“+”就被看作连接符. (2)当“+”两边都是数值类型,“+”就被看作算术运算中的加号. (3)当“+”一边是非数值,一边是数值类型,“+”就被看作连接符.

在枚举中使用位移运算,来判断层叠块

如:k1=2 ; //添加 k2=4 ; //删除 k3=8; //修改 purview = k2|k3; // 赋给添加和删除权限 解释: 第一,2的8位二进制值为00000010 4的8位二进制值为00000100 8的8位二进制值为00001000 第二,当对8和4进行按位或(|)操作后,结果为: 4|8 = 12 00000100 |00001000 = 00001100 为什么会是这样呢?在进行按位或操作时 00000001|00000001=00000001 ; 00000001|0

Java位移运算

位移运算符用来将操作数向某个方向(向左或者右)移动指定的二进制位数.在Java中,位移运算分为左位移和右位移,符号为<<和>>. 左位移运算符 左位移的符号是<<,其运算规则是:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零. 例如,将整数 11 向左位移 1 位的过程如图所示: 从图中可以看到,原来数的所有二进制位都向左移动 1 位.原来位于左边的最高位 0 被移出舍弃,再向尾部追加 0 补位.最终到的结果是 22,相当于原来数的 2 倍