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

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

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

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

在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 移位运算符

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

在移位运算时,byteshortchar类型移位后的结果会变成int类型,对于byteshortcharint进行移位时,规定实际移动的次数是移动次数和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




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

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

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

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

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

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

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

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

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




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


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

package com.filter; public class Math { /** * @param args */ public static void main(String[] args) { long sum = 0; /*for(int i=1;i<100;i++){ if(i % 2 == 0){ continue; } sum += i; }*/ for(int i=1; i<=99; i+=2){ sum +=i; } System.out.println(sum); } }