您的位置:首页 > 编程语言 > Java开发

再学Java基础(2)标识符,变量,数据类型。以及 if与for语句

2012-05-28 07:53 771 查看
这部分 为 java基础的理论部分,明白以及理解会用就可以了。

特别注意for:先执行表达式1,在执行表达式2,然后 执行语句,再然后 执行表达式3.特别是 在执行表达三的时候 要根据题目或需求灵活应用。不要只知道:i++,还要知道:i+=2,i++,i++等等。

关于:jdk1.5的for 今后 再说。敬请期待,呵呵。

在算术运算符部分,需要特别注意的一个语法现象是“晋升”。

晋升指低于int的3种数字类型(byte、short和char)进行算术运算后,结果会自动提升成int类型。示例代码如下:

                   byte b1 = 10;

                   byte b2 = 20;

                   byte b3 = b1 + b2; //语法错误,类型不匹配    会自动传换成 int 类型。

                   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语言中提供了直接操作二进制的运算符,这就是下面要讲解的位运算符和移位运算符。

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


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

         在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。


























例子应用:1+3+5+7....+99

[java] view
plaincopy

package com.filter;  

  

public class Math {  

  

    /** 

     * @param args 

     */  

    public static void main(String[] args) {  

        long sum = 0;  

[java] view
plaincopy

/*for(int i=1;i<100;i++){ 

 if(i % 2 == 0){ 

   continue; 

  }  

  sum += i; 

}*/  

[java] view
plaincopy

      

    for(int i=1; i<=99; i+=2){  

        sum +=i;  

    }  

    System.out.println(sum);  

  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐