zoukankan      html  css  js  c++  java
  • java基础03 位运算符

    位运算是对整数的二进制位进行相关操作,详细运算如下:

    非位运算值表
    A ~A
    1 0

      0 

    1
    与位运算值表
    A B A&B
    1 1 1
    1 0 0
    0 1 0
    0 0 0
    或位运算值表
    A B A | B
    1 1 1
    1 0 1
    0 1 1
    0 0 0
    异或位运算值表
    A B A&B
    1 1 0
    1 0 1
    0 1 1
    0 0 0

    示例如下:

    /**
     * 位运算
     * @author sun
     *
     */
    public class Bitoperation {
    	public static void main(String[] args) {
    		int a = 15;
    		int b = 2;
    		System.out.println(a + "&" + b + "=" + (a & b));
    		System.out.println(a + "|" + b + "=" + (a | b));
    		System.out.println(a + "^" + b + "=" + (a ^ b));
    	}
    }
    

    运算结果如下:

    15&2=2
    15|2=15
    15^2=13

    程序分析:

    a 1 1 1 1 15
    b 0 0 1 0 2
    a&b 0 0 1 0 2
    a|b 1 1 1 1 15
    a^b 1 1 0 1 13
    /**
     * 位运算
     * 
     * @author sun
     *
     */
    public class Bitoperation {
    public static void main(String[] args) {
    		
    		/* 符号位:最高位同时表示符号位,0为正数,1为负数 */
    		
    		/* 
    		 	1、二进制转换为十进制
    
    			二进制转换为10进制的规律为: 每位的值 * 2的(当前位-1次方)
    			例如:
    			    00000001 = 0 * 2^7 + 0 * 2^6 + 0 * 2^5 + 0 * 2^4 + 0 * 2^3 + 0 * 2^2 + 0 * 2^1 + 1 * 2^0  = 1
    			    00000010 = 0 * 2^7 + 0 * 2^6 + 0 * 2^5 + 0 * 2^4 + 0 * 2^3 + 0 * 2^2 + 1 * 2^1 + 0 * 2^0  = 2
    			    
    			2、二进制的符号位:
    				最高位表示符号位,0表示正数  , 1表示负数
    				
    			
    			3、将二进制负数转换为十进制:先对该二进制数取反,然后加1,再转换为十进制,然后在前面加上负号
    				例如: 10101011 最高位为1,所以为负数
    		           第一步:取反: 01010100
    		           第二步:加1 : 01010101
    		           第三步:转换为10进制:85
    		           第四步:加上负号: -85
    		           所以      10101011 转换为十进制为 -85
    		           
    		    4、将十进制负数转换为二进制:先得到该十进制负数的绝对值,然后转换为二进制,然后将该二进制取反,然后加1
    		    	例如:-85
    		    	第一步:得到绝对值 85
    		    	第二步:转换为二进制:01010101
    		    	第二步:取反:                10101010
    		    	第三步:加1:                 10101011
    		    	所以,-85转换为二进制为  10101011
    		 */
    		
    		/*
    		~ ‘非’ 运算符是将目标数的进制去反,即0变成1 ,1变成0
    		2的二进制码为 00000010 , 它取反为11111101 ,可见取反后结果为负数(二进制负数转换为十进制的步骤为:将二进制去反,然后+1)
    		 将 11111101 转换为10进制 ,第一步去反 得到 00000010 然后 加1 得到 00000011 ,得到的结果为3 ,然后在前面加上负号就可以了
    		 所以结果为-3
    		 */
    		System.out.println(~2);
    		
    		/*
    		  ^ 异或 ,计算方式为:两个二进制数的位相同则为0 不同则为1
    		  23转换为二进制为:00010111
    		  12转换为二进制为:00001100
    		  	        计算结果为:00011011  =  27
    		 */
    		System.out.println(23 ^ 12); 
    		
    		/*
    		 & 按位与 ,计算方式为:两个二进制数的位都为1则为1 ,否则为0
    		 1的二进制为 :00000001
    		 2的二进制为 :00000010
    		 	  结果为 :00000000 = 0 
    		 */
    		System.out.println(1&2);
    		
    		/*
    		  | 按位或 ,计算方式为:两个二进制位有一个为1就为1,否者为0
    		  5 的二进制为:00000101
    		  6 的二进制为:00000110
    		  	      结果为:00000111 = 7
    		 */
    		System.out.println( 5 | 6);
    		
    		
    		/*
    		  >> 有符号右移位  ,符号左边表示要被移位的数,右边表示需要移的位数,结果为正数则在左边补0,否则补1
    		  3 的二进制为:00000010
    		        向右移动1位:00000001 = 1 
    		 */
    		System.out.println(3 >> 1);
    		
    		
    	}
    }
    

      

  • 相关阅读:
    pycharm搭建Django项目
    记一次坑爹的Rocketmq排错
    vue关于编辑框的表单变化判断
    PostgreSQL创建空间数据库
    PostgreSQL查询集合结果用逗号分隔返回字符串
    sqoop 抽取 postgres 数据库的数据
    Hive插入parquet格式进行压缩
    python通过kylin的api调度cube
    python的while例子
    numpy和pandas 小计
  • 原文地址:https://www.cnblogs.com/sunTin/p/6616431.html
Copyright © 2011-2022 走看看