`
dadi520
  • 浏览: 145691 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

java 运算符

阅读更多

在算术运算符部分,需要特别注意的一个语法现象是 晋升 晋升指低于int3 种数字类型(byteshortchar) 进行算术运算后,结果会自动提升成int 类型。 示例代码如下:

                   byte b1 = 10;

                   byte b2 = 20;

                   byte b3 = b1 + b2; // 语法错误,类型不匹配

                   int n = b1 + b2;    // 或者 byte b3 = (byte)(b1 + b2);

 

  最后说一下&&& 的区别,其实在进行逻辑与运算时,既可以使用&& 也可以使用& ,在功能上本身没有区别。两者区别的位置在,对于& 来说,如果左侧条件为false ,也会计算右侧条件的值,而对于&& 来说,如果左侧的条件为false ,则不计算右侧的条件,这种现象被称作短路现象。

          示例代码:

                   int n = -1;

                   boolean b1 = (n >= 0) && (n < 10);

                   boolean b2 = (n >= 0) & (n < 10);

          则对于第二行代码来说,两个条件都将被计算,而对于第三行代码来说,因为n >= 0 这个条件不成立,则n < 10 根本不会被执行。当然,两者得到的最终结果是一样的。

          对于现在的代码来说,区别不大,但是如果后续的条件是一个方法( 方法的概念后续将介绍到) ,则将影响程序逻辑。

 

          由于计算机内部的数据都以二进制的形式存在,所以在 Java 语言中提供了直接操作二进制的运算符,这就是下面要讲解的 位运算符和移位运算符

          使用二进制的运算符,可以直接在二进制的基础上对数字进行操作,执行的效率比一般的数学运算符高的多, 该类运算符大量适用于网络编程、硬件编程等领域

          二进制运算符在数学上的意义比较有限。

          Java 代码中,直接书写和输出的数值默认是十进制, Java 代码中无法直接书写二进制数值,但是可以书写八进制和十六进制数字,八进制以数字 0 开头,例如 016 ,十六进制以数字 0 x 开头,例如 0x12,0xaf 等等。

          在计算二进制运算时, Java 语言的执行环境 (JRE) 首先将十进制的数字转换为二进制,然后进行运算。如果输出结果的值,则数字会被转换成十六进制进行输出。

          需要注意的是:

1 、正数的机器数是原码,负数的机器数是补码,计算时需要小心。关于二进制和补码的计算可以参看《 Java 编程那些事儿 7—— 进制的概念》和《 Java 编程那些事儿 8—— 计算机内部的数据表达》。

                  2 、整数型的计算结果都是 int 型,而不管是对 byte 还是 short 进行二进制运算。

4.5.1   位运算符

         Java 语言中的位运算符主要有 4 种: &( 位与 ) |( 位或 ) ^( 异或 ) ~( 按位取反 ) ,下面依次介绍运算规则和使用示例。

l &(AND)

运算规则:参与运算的数字,低位对齐,高位不足的补零,对应的二进制位都为 1 ,则运算结果为 1 ,否则为 0

适用场合:屏蔽数字中某一位或某些位。因为任何数和 0 与都是 0

示例代码:

         int a = 4;

         int b = 10;

         int c = a & b;

计算过程:

          4 的二进制形式为 0000 0000 0000 0000 0000 0000 0000 0100

   10 的二进制形式为 0000 0000 0000 0000 0000 0000 0000 1010

按照计算规则 , 结果为 0000 0000 0000 0000 0000 0000 0000 0000

这个数字转换为十进制就是数字 0

l | (OR)

运算规则:参与运算的数字,低位对齐,高位不足的补零,对应的二进制位有一个为 1 则为 1 ,否则为 0

适用场合:将数字中某一位或某些位修改成 1 。因为 1 和任何数或都是 1

示例代码:

         int a = 4;

         int b = -10;

         int c = a | b;

计算过程:

          4 的二进制形式为 0000 0000 0000 0000 0000 0000 0000 0100

   -10 的二进制形式为 1111 1111 1111 1111 1111 1111 1111 0110

按照计算规则 , 结果为 1111 1111 1111 1111 1111 1111 1111 0110

  这个二进制数转换为十进制就是数字 -10

l ^(XOR)

运算规则:参与运算的数字,低位对齐,高位不足的补零,对应的二进制位相同为零,不相同为 1

适用场合:判断数字对应的位是否相同。

示例代码:

         int a = 4;

         int b = 10;

         int c = a ^ b;

计算过程:

4 的二进制形式为 0000 0000 0000 0000 0000 0000 0000 0100

   10 的二进制形式为 0000 0000 0000 0000 0000 0000 0000 1010

按照计算规则 , 结果为 0000 0000 0000 0000 0000 0000 0000 1110

这个数字转换为十进制就是数字 14

l ~(NOT)

运算规则:只操作一个数字,将该数字中为 1 的位变成 0 ,为 0 的位变成 1

适用场合:反转数字的内容

示例代码:

        int a = 4;

         int c = ~a;

计算过程:

4 的二进制形式为 0000 0000 0000 0000 0000 0000 0000 0100

按照计算规则 , 结果为 1111 1111 1111 1111 1111 1111 1111 1011

这个数字转换为十进制就是数字 -5

  其实位运算和实际的应该实现保持一致,也就是提供的电路级运算符号,每种运算符都有对应的电路实现。

          实际使用简单示例:

把任意数字转换为正数

假设 n 是一个任意的整数,则把 n 转换为正数的代码为:

         int m = n & 0x7fffffff;

判断任意数字倒数第三位的值是否为 1

假设 n 是一个任意的整数,则判断的代码为:

int m = n & 0x4;

boolean b = (m != 0);

将任意数字倒数第四位置为 1

假设 n 是一个任意的整数,则代码为:

         int m = n | 0x8;

 

4.5.2   移位运算符

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

          在移位运算时, byte short char 类型移位后的结果会变成 int 类型,对于 byte short char int 进行移位时,规定实际移动的次数是移动次数和 32 的余数,也就是移位 33 次和移位 1 次得到的结果相同。移动 long 型的数值时,规定实际移动的次数是移动次数和 64 的余数,也就是移动 66 次和移动 2 次得到的结果相同。

 

          例如 11 >> 2 ,则是将数字 11 右移 2

计算过程:

         11 的二进制形式为: 0000 0000 0000 0000 0000 0000 0000 1011 ,然后把低位的最后两个数字移出, 因为该数字是正数,所以在高位补零 。则得到的最终结果是 0000 0000 0000 0000 0000 0000 0000 0010 。转换为十进制是 2

 

整数编码

 

  整数有正负之分,但是计算机内部只能存储0和1,则计算机内部将符号数字化,用二进制码的最高位代表符号位,规定该位为0代表正,1代表负。这就是符号数字化的规定。

    前面介绍过整数在计算机内部都是以二进制的形式保存的。但是为了计算方便,以及简化CPU的结构,所以在存储和运算时都采用补码的形式。

    前面介绍的那些直接计算出来的二进制形式,都称作整数的原码。规定正数的原码、反码和补码都是自身。

    而对于负数,仔细研究一下其组成格式。以8位机为例,也就是一个数字占计算机中的8位,也就是一个字节,用最高位存储符号位,其它的位存储数值。例如-8的原码是10001000,最高位的1代表负数,后续的7位代表数值。

    负数的反码是指符号位不变,其他的位取反,也就是0变1,1变0,则-8的反码是11110111.负数的补码是指在反码的数值位上加1,运算后得到的结果,只计算数值位,不改变符号位。则-8的补码是11111000,该次运算中,低位向高位进行了进位。

    规律:补码的补码等于负数的原码。

    也就是对负数的补码再求补,则得到的负数的原码。

    熟悉整数的表达,对于后续理解数据的区间以及进行强制转换以后得到的数值很有帮助,也是进行位运算的基础。

分享到:
评论
2 楼 linchanglai 2011-03-11  
gaozengguang 写道
我想请教一下:
    int i = 4;
    int j = 9;
    if( ( i++ > 4 ) && ( j++ > 9 ) )
        System.out.println( "first" );  

会输出吗?


不会!
1 楼 gaozengguang 2009-12-20  
我想请教一下:
    int i = 4;
    int j = 9;
    if( ( i++ > 4 ) && ( j++ > 9 ) )
        System.out.println( "first" );  

会输出吗?

相关推荐

    java运算符小程序

    Java运算符是编程语言中用于执行特定操作的关键符号,它们在Java程序中起着至关重要的作用,帮助我们处理数据和控制程序流程。在这个"java运算符小程序"中,我们可以探索和学习Java中的各种运算符及其用法。 1. **...

    java运算符优先级表

    非常详细的java运算符优先级表,帮助记住优先级顺序

    28.java运算符.zip

    28.java运算符.zip28.java运算符.zip28.java运算符.zip28.java运算符.zip28.java运算符.zip28.java运算符.zip28.java运算符.zip28.java运算符.zip28.java运算符.zip28.java运算符.zip28.java运算符.zip28.java运算符...

    Java运算符介绍.pptx.pptx

    Java运算符是编程语言中不可或缺的部分,它们帮助程序员执行各种计算和逻辑判断。在Java中,运算符主要分为四大类:算术运算符、关系运算符、逻辑运算符和位运算符。 1. **算术运算符** - 加法运算符 (+):将两个...

    04-JAVA运算符思维导图

    JAVA运算符思维导图,便捷整理思路,算数运算符、连接运算符、赋值运算符、扩展赋值运算符、三目运算符、逻辑运算符、关系运算符

    javaJava运算符+(优先级、目数)

    Java运算符+(优先级、目数)

    java运算符与优先级

    java运算符与优先级,完善版本。 谢谢,

    Java运算符+(优先级、目数)+.doc

    Java运算符是编程中至关重要的组成部分,它们用于执行各种计算和逻辑操作。了解运算符的优先级和目数对于编写高效、准确的代码至关重要。在Java中,运算符按照其功能分为不同的类别,并且有不同的结合性和目数。 1....

    java运算符大全

    Java运算符是编程语言中用于执行特定计算或操作的符号。了解这些运算符对于编写高效、清晰的Java代码至关重要。以下是对Java运算符及其优先级的详细解释: 1. **点运算符** (.): 用于访问类的成员,如属性和方法。...

    Java运算符优先级

    ### Java运算符优先级详解 在Java编程语言中,了解并正确使用运算符优先级对于构建高效、可读性强的程序至关重要。虽然建议在实际开发过程中通过使用括号来明确表达式的计算顺序,而非依赖于复杂的优先级规则,但...

    Java运算符的使用

    Java运算符是编程中不可或缺的部分,它们用于执行各种计算和逻辑操作。Java提供了四大类运算符:算术运算符、位运算符、关系运算符和逻辑运算符。 1. **算术运算符**: - `+`:加法运算,可用于整数、浮点数的相加...

    java 运算符学习笔记 java 运算符学习笔记

    java 运算符学习笔记

    JAVA 运算符的基本了解与使用

    Java 运算符可以分为以下几类:算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符、三元运算符等。 1. 算术运算符 算术运算符是最基本的运算符,包括加法 (+)、减法 (-)、乘法 (*)、除法 (/)、取余 (% )...

    java运算符优先级.doc

    Java 运算符优先级和异常处理 Java 是一种面向对象的编程语言,它提供了丰富的运算符和异常处理机制,以帮助开发者更好地编写程序。在本文中,我们将详细介绍 Java 运算符的优先级和常见的异常类型,以及它们的解决...

    Java 运算符 动力节点Java学院整理

    Java运算符是编程语言中不可或缺的部分,它们用于执行各种计算、比较和逻辑操作。在Java中,运算符主要分为四大类:算数运算符、关系运算符、逻辑运算符和位运算符。 **算数运算符** 包括加(+), 减(-), 乘(*), 除(/...

    JAVA运算符.pdf

    JAVA运算符是Java编程语言中用于执行各种计算的特殊符号和字符。运算符可以是单一的符号,如加号(+),也可以是关键字,如`instanceof`。Java语言支持多种类型的运算符,主要可以分为以下几类: 1. 算术运算符:...

    java运算符优先级[整理].pdf

    Java 运算符优先级 Java 运算符优先级是指 Java 语言中各种运算符的执行优先级顺序。正确理解运算符优先级对于编写正确的 Java 程序至关重要。 以下是 Java 运算符优先级的详细说明: 1. 点运算符(.) 点运算符...

    java运算符流程控制数组基础题目

    在Java编程语言中,运算符、流程控制和数组是核心概念,它们构成了程序的基本结构。...通过解决相关的题目,开发者可以更好地掌握Java运算符、流程控制和数组的使用,从而编写出更高效、更清晰的代码。

Global site tag (gtag.js) - Google Analytics