`
点点与麦兜
  • 浏览: 9501 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

JAVA位运算符之简要说明

 
阅读更多

首先要了解各个进制数之间的转换

 例如:

         十进制数    ->  二进制数
         0  ->  0
         1   ->  1
         2   ->  10
         3   ->  11
         4   ->  100


举例(计算机字长为8为列):
十进制数5:

原码: 0000 0101
反码:正数的反码与其原码相同,负数的反码为其原码除符号位以外的各位按位取反

         0000 0101

补码:正数的补码与其原码相同,负数的补码为其反码在最低位加1

         0000 0101

 

十进制数  -5:

原码: 0000 0101
反码: 1111 1010

补码: 1111 1011


位与(&)
运算规则:一真一假即为假,两假为假,两真为真。

 

 例:0&0=0;   0&1=0;    1&0=0;     1&1=1;

 

	//0 1 10 11 100 101 110 111 1000 1001
	//0 1 2  3   4   5   6   7    8   9

	int a = 5;//0 0101
	int b = 6;//0 0110
	//-----------------------------------
		     //0 0100
	System.out.println(a&b);
	//结果为4

	//判断int型变量a是奇数还是偶数 
	//偶数的最后一位都是0  0&1 =》为0 所以结果只有0和1两个值
	//a&1  = 0 偶数 
      	//a&1  = 1 奇数
	
	// & 和 &&
	//前面是位运算符 ,后面是逻辑运算符。对于A&B,不管A是否为假,仍然要判断B。而A&&B 第一个不成立就不会去判断第二个了
	
	if(a==b&b==c){
	}
	//用&的话 程序会先判断a是否=b 如果不等于. 还要跳过判断b是否=c.
	
	if(a==b&&b==c){
	}
	//&&的话..程序判断a!=b的话 直接后面的b是否=c就不做判断了




位或(|)
运算规则:有真则真,两假为假。

 

例:0|0=0;   0|1=1;   1|0=1;    1|1=1;

	//0 1 10 11 100 101 110 111 1000 1001
	//0 1 2  3   4   5   6   7    8   9

	int a = 5;//0 0101
	int b = 6;//0 0110
	//-----------------------------------
		     //00111
	System.out.println(a|b);
	//结果7
	
	// | 和 ||
	//前面是位运算符 ,后面是逻辑运算符。对于A|B,不管A是否为假,仍然要判断B。而A||B 第一个成立就不会去判断第二个了



位异或(^)
运算规则:0^0=0;   0^1=1;   1^0=1;   1^1=0

 

	//0 1 10 11 100 101 110 111 1000 1001
	//0 1 2  3   4   5   6   7    8   9

	int a = 5;//0 0101
	int b = 6;//0 0110
	//-----------------------------------
		     //0 0011
	System.out.println(a^b);
	//结果3



//不用第三变量,交互两个数的值
 public static void swap(){
	int a = 4;   
	int b = 2;    
	a ^= b;  //a = a^b;   a = 1
	b ^= a;  //b = b^a;   b = 4
	a ^= b;  //a = a^b;   a = 2;
	System.out.println("a="+a+"         "+"b="+b);
    }



位非(~)
运算规则:~1=0;   ~0=1;

	//0 1 10 11 100 101 110 111 1000 1001
	//0 1 2  3   4   5   6   7    8   9
	
	int a = 5;//0000 0000 0000 0101
	
	//-----------------------------------
		  //1111 1111 1111 1010  这是-6
	System.out.println(~a);
	//结果为 -6



右移(>>)

例如:a = a >> 3 将a的二进制位右移3位(将2转为2进制再进行位移)

2 => 10
右移两位
0010 => 0000  为0

3 => 11
右移一位
0011 => 0001  为1

无符号右移(>>>)
不管是正数还是负数左边都补0



左移(<<)

例如:a = a << 3 将a的二进制位左移3位

2 => 10
左移两位
0010 => 1000  为8

3 => 11
左移一位
0011 => 0110  为6


int  mulTwo( int  n){ //计算n*2    
    return  n<<1;  
}  

int  divTwoPower( int  n, int  m){ //计算n/(2^m)   
    return  n>>m;  //除以2的m次方
}  

//求两个数的平均值
int  getAverage( int  x,  int  y){  
        return  (x+y) >>  1 ;   //将两个数的和右移一位 也就是除以2
}  




二进制数10的十进制数为2,二进制数100的十进制数为4,以此类推,
可见十进制数的两倍这是二进制数左移了一位,
所以除以2的话就是右移1位了,如果要除以4 也就是 2*2 那就右移两位,以此类推。

 

0
1
分享到:
评论

相关推荐

    Java 基础语法.md

    这是 Java 基础语法的简要概述,涵盖了变量、数据类型、运算符和控制流程等基本概念。希望这个资料对您有帮助!如果您有任何其他问题,请随时提问。

    Coding_Practice-Intro_Java_programming:中文版Java编程简介,第1卷基础版

    JAVA编程简介,第8版第一卷-基础知识(简要版)由Y.Daniel Liang 描述本书的组织这些章节可以分为五个部分,一起构成Java编程,数据结构和算法以及数据库和Web编程的全面介绍。 由于知识是累积性的,因此前几章为...

    使用Android 系统测量软件开发技术 [武安状 主编] 2014年版

    Java语言基础3.1 Java简介3.1.1 Java概述3.1.2 Java语言特点3.1.3 Java组成与体系3.1.4 Java运行体系3.2 Java基础3.2.1 Java数据...运算符3.5 Java表达式3.5.1 算术表达式3.5.2 关系表达式3.5.3 逻辑表达式……第4章...

    突破程序员基本功的16课.part2

    13.4.2 提供简要说明 13.4.3 编写伪码实现 13.5 编码实现和开发心态 13.5.1 开发是复杂的 13.5.2 开发过程是漫长的 13.6 小结 第14课 程序调试 14.1 程序的可调试性 14.1.1 增加注释 14.1.2 使用log 14.2...

    Visual C# 2010 How To Program 4Th Edition

    paul是世界上最有经验的java和c++的企业培训师之一,已经讲授过100多门专业性的java和c++培训课程。他还为计算机协会波士顿分部讲授c++和java课程。他和他的父亲harvey m. deitel博士都是世界上最受欢迎的计算机科学...

    Python不支持 i ++ 语法的原因解析

    在C / C ++ / Java之类的语言中,对整数变量进行自增或自减运算是标准的,可以分为前缀运算(++ i和–i)和后缀运算(i ++和i–), 每个都有细微的差异和不同的目的。 当这些语言的用户进入Python时,他们

    21天学通C语言第六版(PDG)

    本书译自《Teach Yourself C in 21 Days》第6版,该书的前五版都登上了畅销书排行榜,是初学者学习C语言的经典之作。本版按最新的标准(ISO/IEC:9899-1999),以循序渐进的方式介绍了C语言编程方面的知识,并提供了...

    uninformed-equation-searcher:给定的 N 个数字集合的子集和 4 个基本算术运算 (+, -, x, ) 以达到目标。 例如

    Java-uninformed-equation-searcher 给定 N 个数字集合的子集和 4 个基本算术运算(+、-、x、/)以达到目标。 例如:给定一组数字 1,2,3,4,6 和目标 53,达到目标的一种方法是: (2 + 3 + 4) ∗ 6 1 (a) 为问题定义...

    net学习笔记及其他代码应用

    并简要说明理由。 public void test(int i) { lock(this) { if (i&gt;10) { i--; test(i); } } } 答:不会发生死锁,(但有一点int是按值传递的,所以每次改变的都只是一个副本,因此不会出现死锁。但如果...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    同时是一位演讲家及Oracle ACE。  JARED STILL 从1994年就开始使用Oracle。他认为对于SQL的学习是永无止境的,相信每一个查询Oracle数据库的人都需要精通SQL语言,才能写出高效的查询。他参与本书的编写就是为了...

Global site tag (gtag.js) - Google Analytics