Java 基础 之 位运算

http://www.verejava.com/?id=16992602784016

public class Operation5
{
    public static void main(String[] args)
    {
        //位运算
        /*
            包括:
                与 &, 或 |, 取反 ~, 异或 ^
                带符号左移<<, 带符号右移 >>, 无符号右移 >>>
                1. & 就是二进制位如果都是1则为1,否则为0
                2. | 就是二进制位如果都是0则为0,否则为1
                3. ~ 就是二进制位如果是0取反变成1,否则如果是1取反变成0;
                4. ^ 就是运算两边二进制位两边同时相等时为0,否则为1
                5. <<就是将二进制位逐位向左移动n位,后面补n个0,相当于乘2;
                6. >>就是将二进制位逐位向右移动n位,前面补n个符号位,向当于除2;
                6. >>>就是将二进制位逐位向右移动n位,前面补n个0
        */
        byte a=1; //二进制 00000001
        byte b=8; //二进制 00001000
        byte c=127; //二进制 01111111
        byte d=-127;//二进制 10000001
        System.out.println(a&b);  //结果 00000000
        System.out.println(a|b);  //结果 00001001  2^3+2^0=9
        System.out.println(~a);   //结果 11111110补码 转换为原码=10000001=-1-1=-2
        System.out.println(a^b);  //结果 00001001 =9;
        System.out.println(a<<1); //结果 00000010 2^1=2
        System.out.println(c<<1); //结果 11111110 =254
        System.out.println(a>>1); //结果 00000000 =0
        System.out.println(c>>1); //结果 00111111 =63
        System.out.println(d>>1); //结果 11000000补码 原码=10111111=-63-1=-64
        System.out.println(d>>>1);//结果 01000000原码
        /*
            注意:
             1.计算机存储时 二进制第一位是表示符号位 1 代表负数, 0代表正数
             2.计算机存储时以补码的方式存储的, 正数的补码跟原码一样,负数的补码是去掉第一位符号位取反然计算结果后  再 + 1 得到的.
             3. 那补码转换成原码就反过来 去掉第一位取反计算结果后  再-1.
             4. System.out.println 没有 System.out.println(byte b)方法,计算机先自动将byte转化成 int 然后在移动
        */
    }
}

http://www.verejava.com/?id=16992602784016

原文地址:http://blog.51cto.com/11960922/2121216

时间: 2024-11-07 06:26:37

Java 基础 之 位运算的相关文章

java中的位运算

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

java基础学习-变量&运算

package com.J; public class java { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub float a=1.11111111111111f;    // 数据表示单精度末尾+"f",此处数据存储要溢出 double b=1.1111111111111111;  // java里面默认小数都为double双精度浮点

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笔记:位运算

一.数据存储 二进制数在内存中以补码的形式存放.正数的反码.补码均为本身.负数的反码为符号位不变且其余位取反,补码为反码+1. 二.位运算 ①按位取反:反转操作数中的所有位. ②按位与:仅当两个操作数都是1,结果为1.否则为0. ③按位或:只要有一个操作数是1,结果为1.否则为0. ④按位异或:只有一个操作数是1,结果为1.否则为0. ⑤左移:将不包括符号位的所有数值向左移动指定次数,右边补充0.每左移一位相当于*2. ⑥右移:将不包括符号位的所有数值向右移动指定次数,左边补充0.每右移一位相当

Java负数的位运算

/** * 求负数的位运算 *///1. -10 >> 2 = ?//2. -10的原码: 1000 0000 0000 0000 0000 0000 0000 1010 最高位代表符号位//3. -10的反码: 1111 1111 1111 1111 1111 1111 1111 0101 符号为不变,其他位相反//4. -10的补码:1111 1111 1111 1111 1111 1111 1111 0110 补码为反码加1//5. 补码右移2为:1111 1111 1111 1111

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; /*

JavaSE7基础 使用位运算异或 进行两个变量的数值交换

jdk版本  :jdk-7u72-windows-i586系统     :Windows7编辑器   :Notepad++ v7.4.2注意事项 :博文内容仅供参考,不可用于其他用途. 代码 class Demo{ public static void main(String[] args){ int a=10; int b=20; //一般来讲,把这两个数交换可以申请一个中间变量temp //在高深一点的话,可以建立方程组 //然而,在视频教程中老师 却是这样做的... a = a ^ b;

java中的位运算及移位运算

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

【java】之位运算^,&amp;,&lt;&lt;,&gt;&gt;,&lt;&lt;&lt;,&gt;&gt;&gt;总结

1.^(亦或运算) ,针对二进制,相同的为0,不同的为1 public static void main(String[] args) { System.out.println("2^3运算的结果是 :"+(2^3)); //打印的结果是: 2^3运算的结果是 :1 } 2 =======>0010 3 =======>0011 2^3就为0001,结果就是1 2.&(与运算) 针对二进制,只要有一个为0,就为0 还是上述的例子 public static void