java学习笔记第二天

运算符

位运算符:二进制运算


按位与运算:&


    int result=12&3;   结果为0
    转换成二进制
    00001100
    00000011    右侧有效位对齐,上下比较,两者都为1,结果才为1,否则就为0
    -------------
    00000000    得0
    int result=12&4; 结果为4
    00001100
    00000100  
    -------------
    00000100    第三位相同,2的2次方=4

按位或运算:|


    int result=12|11;  结果为15
    00001100
    00001011
    -------------
    00001111
    两者有一者为1则为1

按位异或运算:^


    int result=12^11;   结果为7
    00001100
    00001011
    ------------
    00000111
    两者不同则为1,两者相同则为0

反码运算:~  

(所有数值变为相反,包括符号位)
    int result=~11;   结果为-12
    00001011
    11110100  (各数位取反之后)
    ↑为符号位,1代表负数,根据负数的运算规则,将负数的反码+1得出结果
    10001011   +1
    10001100   得出结果是-12,共取反两次

移位运算

左移:<<


    int result=1<<2;  将1向左移动两位
    00000001
    00000100    (所有有效位全部移动,移动后空出的数位补0)
    3*8的最快计算方法:3<<3

    右移:>>  (负数的数位移动)

  空出来的位置补符号位,与原数符号位一致,缺几个空,补几个符号位
    int result=-1>>2;  将1向左移动两位
    10000000 00000000 00000000 00000001   原码
    11111111 11111111 11111111 11111111   补码:保留符号位,按位取反后+1
    11111111 11111111 11111111 1111111111   这里右移两位,在左侧高位补1
    ↑↑ 这两位是根据符号位补充的数位    ↑↑  这两位因右移超出界限,去掉不要
    11111111 11111111 11111111 11111111
        再根据补码写原码
    10000000 00000000 00000000 00000000   保留符号位,按位取反+1
    10000000 00000000 00000000 00000001   得结果:-1

    >>>    

高位空出的位置补0
int result=-1>>>1; 

二者交换

第一种方法:第三变量

第二种方法:加法运算
int a=11,b=22;
a=a+b;//   a=33   b=22;
b=a-b;//   a=33   b=11;
a=a-b;//   a=22   b=11;

第三种方法:异或运算
int a=11,b=22;
a=a^b;  //   a=29       b=22;
b=a^b;  //   a=29       b=11;
a=a^b;  //   a=22       b=11;

赋值运算


    =,+=,-=,*=,/=,%=
    a=12;
    a+=2;

三元运算


    int result=12>34?11:33;  结果是33  (A?B:C)      A是布尔类型,B,C是值,若A为true,则取B的值,否则取C的值
    
    System.out.println(true?3:4.0);      结果是3.0   有double类型参与的运算结果都是double类型

&和&&的区别

&,|也可以对Boolean进行运算,得到布尔值
boolean bool=true&false;    结果是false    &和&&运算结果是一样的,但是过程不一样
a=12;b=12;
bool=a++<12 & b++>12;     按位与运算符,将前后两个数据按照二进制位进行“与”运算
bool=a++<12 && b++>12;      逻辑运算符,判断true,false,若前为false,则后面算式不计算(有短路现象)

运算符优先级

(本图引用网络图片)

    

流程控制

    if(){}
    else{}
    else if(){}

    swich  case
    swich匹配某一个变量的值,如果匹配到某一个case的项,就从这个case开始运行
    运行到break或者代码块结束
    所有的case项都没有匹配成功才会执行default
    执行顺序从上到下
    1.case项和default项的顺序可以错乱
    2.switch可以匹配的类型:byte,short,int,char,String,Enum(枚举)

    循环while   for:
    
    while循环适合不知道循环多少次的情况
    while(循环条件){
        循环体
        i++;
    }

    do{
        循环体
    }while(循环条件);          do...while至少执行一次

    for循环适合已知循环多少次的情况
    for(int i=0;判断条件;i++){
        循环体
    }

break结束所在循环体
continue跳出本次循环,继续执行下一处循环

break跳出多重循环:
    1.给for循环起名字,break后加循环名字。
    a:for(;;){
        b:for(;;){
            break a;
         }
     }
    
    2.Boolean bool=true;
       for(;bool&&其他条件;){
        for(;bool&&其他条件;){
            if(结束所有循环条件)
                bool=false;
        }
    }

死循环:没有结束条件的循环,之后不能写其他代码,代码报错
无限循环:结束循环的条件永远达不到,之后可以编写其他代码,代码不报错

数组

数组是有序的元素序列
一维数组三种定义写法:
        int[] arr={2,4,5,6,7,8,9};
        int[] arrB=new int[]{23,45};    (这两种是静态初始化)

        int[] arrA=new int[5];      (这是动态初始化) [5]代表可以存放5个元素
    数组的限定:
    1.只能存放指定类型的数据
    2.程序运行时数组的长度是不可变的
    3.下标不得越界

    使用数组中的元素   下标从0开始依次增加
    System.out.println(arr);打印第一个元素的地址
    System.out.println(Arrays.toString(arr));打印所有元素
    
    获取数组长度:
    System.out.println(arr.length);
    
        int[][] arrs=new int[4][2];
        arrs[0][0]=2;
        System.out.println(Arrays.deepToString(arrs));
    二维数组的限定:其中一维数组的个数不可变,数组内元素个数可变

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值