黑马程序员--java运算符

               今天是我第一次在这个博客上发表自己的看法和学习的日志,我感觉很激动,废话不罗嗦,我还是开始进行我今天的日志阐述吧。

                当我们在面试或者是java软件考试的时候,经常会出现一些运算符的问题,例如怎么快速的算出2*8等于多少,这些问题虽然小,但是却在考验我们的学习能力和用心程度,接下来我将分享我个人对此的一些看法。

               1.在计算机中我们也经常的出现运算,我们将其定义为“算术运算符”,主要包括

               + 加法 ,– 减法(一元减号), * 乘法, / 除法 ,% 模运算, ++ 递增运算, += 加法赋值, –= 减法赋值 ,*= 乘法赋值, /= 除法赋值

               对于加、减、乘、除就相当于我们数学中的加、减、乘、除,这块没有什么好讲的地方。

               但是,对于++,+=,-=,*=,/=考试或者是面试官就可能会问到,举个简单的例子:

              int i = 2;
		i = i++;
		System.out.println(i);//和
		int i= 2;
		i = ++i;
		System.out.println(i);
                 //之间有什么区别?

              从题目中我们可以看出一个是先++,一个是后++,先++是先赋值,再进行运算,也就是说i=2,然后i = i +1;后者是先加1,然后进行赋值,结果分别为2,3。

             除了这些意外,许多题目经常将算术运算符和数据类型进行联系起来考察,举个例子:

		byte i = 2;
		i+=(i++)+3;//这两行代码是否错误,如果错误指出原因,如果没有错误i的结果是什么

             当我们很多同学做这道题的时候经常的看后面的是3,认为是int类型,必须要将结果转变成byte类型,但是却忘记了前面是+=而不是=,+=进行了隐形式的类型转换,所以结果最后为5。当然对于-=、*=、/=也是则样的情况。

             2.ava定义的位运算(bitwise operators)直接对整数类型的位进行操作,这些整数类型包括long,int,short,char, byte,对于这类运算符我们成为位运算符,其主要包括:

       ~ 按位非(NOT)(一元运算) 、& 按位与(AND)、>> 右移

        | 按位或(OR) 、^ 按位异或(XOR)、>>> 右移,左边空出的位以0填充、

        << 左移 、&= 按位与赋值、 |= 按位或赋值 、^= 按位异或赋值 、>>= 右移赋值 、>>>= 右移赋值,左边空出的位以0填充 、<<= 左移赋值     

        所有的整数类型以二进制数字位的变化及其宽度来表示。例如,byte型值42的二进制代码是00101010,其中每个位置在此代表2的次方,在最右边的位以20开始。向左下一个位置将是21,或2,依次向左是22,或4,然后是8,16,32等等,依此类推。因此42在其位置1,3,5的值为1(从右边以0开始数);这样42是21+23+25的和,也即是2+8+32 。

       所有的整数类型(除了char类型之外)都是有符号的整数。这意味着他们既能表示正数,又能表示负数。Java使用大家知道的2的补码(two's complement)这种编码来表示负数,也就是通过将与其对应的正数的二进制代码取反(即将1变成0,将0变成1),然后对其结果加1。例如,-42就是通过将42的二进制代码的各个位取反,即对00101010取反得到11010101,然后再加1,得到11010110,即-42 。要对一个负数解码,首先对其所有的位取反,然后加1。例如-42,或11010110取反后为00101001,或41,然后加1,这样就得到了42。

       下面带来一道经典的面试题:

                  

		int i = (60&30)<<2;
		System.out.println(i);//和
		int i = 60&30<<2;
		System.out.println(i);//之间有什么区别

         首先先看(60&30)<<2,有括号先计算括号里面的60&30的结果为28,然后位移两位为112,因为位移两位就是28*2的2次方,而对于后者来说结果却为56,原因是&表示and,如果没有括号发生那么分别分别执行左右两边,没有关联,然后and,计算结果为56。

        接触位运算符,不得不说的就是计算的简便性,虽然在现实生活中我们经常用工具进行计算,但是如果我们身在考场,或者是没有工具的情况下,就会使我们丧失这一道题的得分,因此我们还是需要掌握知识:

       对于<<就是左边的数,乘以2的右边数次方,例如24 = 3<<3;,对于>>则是相反,但是需要注意的一点是,我们如果整除不了,就保存整数,如5>>2 = 1;
      3. 
关系运算符
    关系运算符用于比较两个数值之间的大小,其运算结果为一个逻辑类型的数值。关系运算符有六个:等于(==)、不等于(!=)、大于(>)、大于等于(>=)、小于        (<)、小于等于(<=)。

    例如:
    10 <= 8      //运算结果为false
    2.4 >= 8.2  //运算结果为true
    'A' < 'a'   //运算结果为true,因字符'A'的Unicode编码值小于字符'a'的
    要说明的是,对于大于等于(或小于等于)关系运算符来说,只有大于和等于两种关系运算都不成立时其结果值才为false,只要有一种(大于或等于)关系运算成立其结果值即为true。例如,对于9 <= 8,9既不小于8也不等于8,所以9 <= 8 的运算结果为false。对于9 >= 9,因9等于9,所以9 >= 9的运算结果为true。

     4.逻辑运算符
   
逻辑运算符要求操作数的数据类型为逻辑型,其运算结果也是逻辑型值。逻辑运算符有:逻辑与(&&)、逻辑或(||)、逻辑非(!)、逻辑异或(^)、逻辑与(&)、逻辑或(|)。
    真值表是表示逻辑运算功能的一种直观方法,其具体方法是把逻辑运算的所有可能值用表格形式全部罗列出来。Java语言逻辑运算符的真值表如下:
   
逻辑运算符的真值表
    A        B        A&&B   A||B    !A      A^B     A&B    A|B
    false   false    alse   false   true    false   false  false
    true    false    false  true   false    true    false  true
    false   true     false  true   true     true    false  true
    true   true      true   true   false    false   true   true

    举个例子简单的说明一下,也是在考试或者面试经常出现的:

   (i>=1) && (i<=100)
    此时,若i等于0,则系统判断出i>=1的计算结果为false后,系统马上得出该逻辑表达式的最终计算结果为false,因此,系统不继续判断i<=100的值。短路计算功能可以提高程序的运行速度。

用逻辑与(&&)、逻辑或(||)和逻辑非(!)可以组合出各种可能的逻辑表达式。逻辑表达式主要用在 if、while等语句的条件组合上。
    例如:
    int i = 1;
    while(i>=1) && (i<=100) i++;    //循环过程
    上述程序段的循环过程将i++语句循环执行100次。

    对于运算符来说,如果深刻研究会发现无限的乐趣和表达形式,希望我能够将运算符掌握的更透彻,也希望大家对运算符的掌握更娴熟。


 

 

 

 

 

 



 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值