Loading

3.java位运算符,特有表达式,运算符优先级图表,for循环学习

一.基础内容

1.运算符与表达式和C的基本一样

这里要补充的是以前没弄懂的

1.位运算符

1.1 按位&运算(按位与运算)

按位与运算符&是双目运算符,对两个整型数据进行二进制按位&进行运算,运算的结果也是一个整型数据,其运算法则是:
如果两个数据对应位都是1,则结果的该位是1,否则是0

例子:

m:   00000111
n:   10101011
n&m: 00000011 

编写程序验证:

public class BitAndStudy {
    public static void main(String[] args) {
        //这里使用的api可以将二进制转为10进制
        int num = Integer.parseInt("00000111",2);
        int num1 =Integer.parseInt("10101011",2);
        int result = num&num1;
        System.out.println(Integer.toBinaryString(result));
    }
}

在这里插入图片描述
它也可以做判断符来用,但与&&有差别:
& 不管前面的条件是否正确,后面都执行
&& 前面条件正确时,才执行后面,不正确时,就不执行,就效率而言,这个更好

1.2 按位|运算(按位或运算)

按位或运算符|是二目运算符,运算法则和&类似
只要两个数据对应位有一个是1,则结果的该位是1,否则是0

例子:

public static void orStudy(){
    //这里使用的api可以将二进制转为10进制
    int num = Integer.parseInt("00000111",2);
    int num1 =Integer.parseInt("10101011",2);
    int result = num|num1;
    System.out.println("00000111 | 10101011= "+Integer.toBinaryString(result));
}

在这里插入图片描述

1.3 按位~运算(按位非运算)

按位非运算符~是单目运算符,对一个整型数据a按位进行运算
例子:

public static void nonStudy(){
    //这里使用的api可以将二进制转为10进制
    int num = Integer.parseInt("00000111",2);
    int result = ~num;
    System.out.println("~00000111 = "+Integer.toBinaryString(result));
}

在这里插入图片描述

1.4 按位异或运算^(按位异或运算)

按位异或运算符^是二目运算符,运算法则:
如果两个数据对应位相同,则结果的该位是0,否则是1
例子:

/**
 * 异或运算: 相同为0,不同为1
 */
public static void nonOrStudy(){
    //这里使用的api可以将二进制转为10进制
    int num = Integer.parseInt("00000111",2);
    int num1 =Integer.parseInt("10101011",2);
    int result = num^num1;
    System.out.println("00000111 ^ 10101011= "+Integer.toBinaryString(result));
}

在这里插入图片描述

1.5 按位右移>>,>>>

>>按位右移(相当于将数右移) >>>按位右移,但它会用0填充高位(变小)
/**
 * 按位右移: 数会变小
 */
public static void rightMoveStudy(){
    int num = Integer.parseInt("00000111",2);
    int result = num>>1;
    System.out.println("00000111>>1 = "+Integer.toBinaryString(result));
    int result2 = num>>>1;
    System.out.println("00000111>>>1 = "+Integer.toBinaryString(result2));
}

在这里插入图片描述

1.6 按位左移<<

<<按位左移(相当于将数左移,变小)注意:不存在<<<

/**
 * 按位左移: 数字变大
 */
public static void leftMoveStudy(){
    int num = Integer.parseInt("00000111",2);
    int result = num<<1;
    System.out.println("00000111<<1 = "+Integer.toBinaryString(result));
}

在这里插入图片描述

2.新增运算符:instanceof运算符

该运算符是二目运算符,左面的操作元是一个对象,右面的是一个类。此运算符先做了解,由于目前可能没有类的概念,所以说现在不太好理解。
当左面的对象是右面的类或子类创建的对象时,该运算符的结果是ture,否则是false

3.for基本语句

这里和C完全相同。但java提供了遍历数组循环语句:for(声明循环变量:数组的名字){…}
例子:

public class ForStudy {
    public static void main(String[] args) {
        int[] num = {1,2,3,4,5};
        for(int n:num){
            System.out.println(n);
        }
    }
}

在这里插入图片描述

二.实践经验积累

本人认为本章的重点其实是为了给我们学习和设计算法打下一个基础,我们要学会将学到的算法转移到这里来,或者利用java的特性设计出新的算法,其实,程序设计,算法是最关键的地方,也是最难突破的地方。

例子:编写一个应用程序求100以内的全部素数

要编写出这样一个程序,我们要知道什么是素数:素数一般指质数,质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。

import java.util.Scanner;
/**
 * 计算1-n范围内的素数
 */
public class QuestStudy {
    public static void main(String args[]) {
        int start , end ;
        Scanner reader  = new Scanner(System.in);
        System.out.println("请输入数字上限: ");
        end = reader.nextInt();
        int n = 0;
        int i = 0;
        //根据end计算1到end之间所有素数
        for (start = 1; start < end; start += 2) {
            int k = (int) Math.sqrt(start);
            for (i = 2; i <= k; i++) {
                if (start % i == 0)
                    break;
            }
            if (i >= k + 1) {
                System.out.println(start);
                n++;
            }
        }
    }
}

代码地址:
https://gitee.com/yan-jiadou/study/tree/master/Java%E5%9F%BA%E7%A1%80%E5%AD%A6%E4%B9%A0/src/main/java/exa03

posted @ 2019-09-08 15:11  文牧之  阅读(17)  评论(0)    收藏  举报  来源