zoukankan      html  css  js  c++  java
  • 个人认为运算符常见的一些简单问题

    开篇都是这一句,见谅!由于本人是个初学者希望自己的文章不会误导广大“群众“,如果有错误之处还望前辈指出。谢谢!

    一、扩展的运算符(+= ,-= ,*= ,/=,%=)的一个小问题:存在强制类型的转换。

    short s=1;s = s+1; 
    short s=1;s+=1;
    上面两个代码有没有问题,如果有,那里有问题。
    第一个有问题,第二个没有问题。
    因为:第一行代码里s为指定的string类型,s+1有一次类型转换,变成了int类型,再赋值给short类型的时候会报错显示损失精度。然而扩展的赋值运算符其实隐含了一个强制类型转换。
    s += 1;
    不是等价于 s = s + 1;而是等价于 s = (s的数据类型)(s + 1);因而编译运行成功。

    二、比较运算符:
    ==,!=,>,>=,<,<=
    特点:无论你的操作是简单还是复杂,(结果都是boolean类型!!!!。)

    //boolean flag = (a == b);
    //boolean flag = (a = b); //这行代码是有问题的,不兼容的类型;里面不是比价运算符,而是赋值运算符。因此=不要与==混淆。
    //System.out.println(flag);

    三、逻辑运算符:&,|,^,! ,&&,||

    &&和&的区别? 同理||和|的区别?
    A:最终结果一样。
    B:&&具有短路效果。左边是
    false,右边不执行。
     ||具有短路效果。左边是
    true,右边不执行。

    举例:

    int x = 3;
    int y = 4;

    boolean b1 = ((++x == 3) && (y++ == 4));//(4==3flase)已经错误,后边的不再执行。如果输出的话:x=4,y=4,b1=flase

    boolean b2=((++x==4)||(y++==4);//(++x==4)已经正确,后边的不再执行。如果输出的话:x=4;y=4;b2=true

    四、位运算符:& | ~  ^ >> << >>>

    临时有事,明天有空接着写,嘿嘿。谢谢观看和补充O(∩_∩)O

    期末考试结束,代码撸起来!

    要做位运算,首先要把数据转换为二进制。

    例如:求~3和~4:  对补码的格式进行按位取反,而我们看到取反后的数值是原码格式

      3的二进制:     00000000 00000000 00000000 00000011   原码=补码

                                 ~ 11111111 11111111 11111111 11111100   补码

                                   11111111 11111111 11111111 11111011   反码

                                         10000000 00000000 00000000 00000100   原码       这里是我们看到的结果:-4

    ^的特点:一个数据对另一个数据位异或两次,该数本身不变。例如:a ^ b ^ b   结果a的值不变

    <<:左移 左边最高位丢弃,右边补齐0       >>:右移 最高位是0,左边补齐0;最高为是1,左边补齐1    (是啥补啥)   >>>:无符号右移 无论最高位是0还是1,左边补齐0

    << 把<<左边的数据乘以2的移动次幂:3 << 2=3*2^2=12;         >> 把>>左边的数据除以2的移动次幂:24 >> 2=24/(2^2)=6

    *-24 >> 2 :

    计算出24的二进制:11000
    原码:10000000 00000000 00000000 00011000
    反码:11111111 11111111 11111111 11100111
    补码:11111111 11111111 11111111 11101000

    数据是对补码操作
    11111111 11111111 11111111 11101000
    1111111111 11111111 11111111 111010(00) 补码

    补码:1111111111 11111111 11111111 111010
    反码:1111111111 11111111 11111111 111001
    屏幕显示的原码形式
    原码:1000000000 00000000 00000000 000110
    结果是-6

    五、三目运算符: 比较表达式?表达式1:表达式2;结果是一个boolean类型的数据,执行流程:先看表达是正确与否;正确执行表达式1,错误执行表达式2

    判断大小:int max = a>b?a:b;
    System.out.println("两个数较大的数是:"+max);

    //比较三个数的较大的值
    int c = 12;
    //int flag;常常用temp做为临时变量,flag用作boolean类型中常见
    int temp = a>b?a:b;
    int max1= c>temp?c:temp;
    System.out.println("三个数较大的数是:"+max1);
    }
    }














  • 相关阅读:
    SQLserver 连接+开窗函数+视图+事务
    SQLServer学习笔记系列8
    SQLServer学习笔记系列7
    SQLServer学习笔记系列6
    如何保护.net中的dll文件(防破解、反编译)
    idea项目运行正常,但是类出现红色波浪线
    eclipse出现An internal error occurred during: "Repository registry initialization". Array index out of
    ul列表事件($(this).data('value') 这个是什么意思?)
    vue学习
    两段简单的JS代码防止SQL注入
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299923.html
Copyright © 2011-2022 走看看