• 《JAVA---day03---运算符》


    /*【位运算符】
    运算符:    运算            范例                        说明
    
    <<:            左移            3<<2=12--->3*2*2=12            
    >>:            右移            3>>2=1---->3/2=1
    >>>:        无符号右移        3>>>2=1--->3/2=1
    &:            与运算            6 & 3=2
    |:            或运算            6 | 3=7
    ^:            异或运算        6^3=5
    ~:            反码            ~6=-7
    
    */
    //左移:左移就是乘以2的次幂运算。移几位就是几次幂。
    //左移的用处:比如要在计算机中做3*4的运算,
    //在计算机中是用二进制相乘的011*100,但是
    //现在可以用位运算的方式(左移来运算),
    //即把3左移2位就得到结果了,这样的运算速度很快,
    //其弊端是只能操作2的倍数,在开发过程中如果要操作2
    //的倍数或者2的次幂时,可用位运算来实现。
    
    //右移:右移就是除以2的次幂运算。移几位就是几次幂。
    /*
    右移时,原最高位是什么,空位就补什么(保持原来的符号性)。
    */
    
    //无符号右移:不用于做除法运算。
    /*
    无论原最高位是什么,空位都补0.
    用处在于:获取二进制中某一段的值 比如:
    一个二进制为:00000000 00111100 00000000 00110110
    如果三位三位的获取其值(一次右移无符号三位),第一次
    右移三位取得的是(110:结果为6),然后去掉这三位,则
    下一个三位变成了最低的三位,再获取这个三位……最后得到的
    结果是这个二进制对应的八进制数。(获取四位,就是二进制
    对应的十六进制)
    
    总结就是:在进行关于2的运算时,考虑左移和右移运算。
               在进行二进制的位操作是,要用到无符号右移。
    */
    
    //&运算:
    /*
    在二进制中在&运算过程中,只有全为1时,结果才为1,
    否则为0.
    
    用处是:在获取某一个二进制的某几位的时候比如:
    一个二进制为00101011,要获取最后三位是可以用三个1和
    最后三个二进制为相与
    一句话:用来获取二进制中的有效位1
    00101011
    00000111
    -----------
    00000011------最后三位为二进制位
    当要获取第二个三位时,可以先把此二进制无符号右移三位
    在和00000111相与即可
    */
    
    //|:运算
    /*
    6|3=
     110
    |001
    ----
     111 --->7(十进制)
    */
    
    //^:运算
    /*
    6^3=5
      110
     ^011
     ----
      101 --->5
     ^011 
     ----
      110 --->6
      即6^3^3 = 6;
      一个数异或另一个数,结果还是原数。(用于加密方面)
    */
    
    //~:取反运算:
    /*
    ~6=-7:计算如下:
    6--->00000110 取反得:--->11111001
    因为在计算机中是用补码形式存放的。所以要把11111001
    看成一段补码,现在把这个补码转换为原码(先变为反码:
    减1就行得--->11111000,再变为原码,最高位是符号位,不变
    其他为按位取反得--->10000111再转化为十进制为-7)
    比如6取反再加1得-6
    */
    
    //位运算符的练习:
    
    /*
    1,如何最有效率的计算2*8
    通过左移来运算:2<<<3--->2*8 = 16;
    //System.out.println(2<<3);--->结果是16
    2, 对两个整数变量的值进行互换(不需要第三方变量)
       int a = 3,b = 7;
    
       //通过第三方变量的方法如下:
       int temp;
       temp = a;
       a = b;
       b = temp;
    
       //(不经过第三方变量)通过和的形式。有个弊端,两个数据较大,可能会超出int范围。
       //这个方法不太好
       a = a+b;    //a = 3+7;
       b = a-b;    //b = 3+7-7;    b = 3;
       a = a=b;    //a = 3+7-3;    a = 7;
    
       //(不经过第三方变量)通过位运算来解决。
       a = a^b;    //a = 3^7;
       b = a^b;    //b = 3^7^7; --->b = 3; 
       a = a^b;    //a = 3^7^3; --->a = 7;
    */
    
    //三元运算符:格式:(条件表达式)?表达式1:表达式2;
        //int x = 2,y;
        //y = x>1?100:200;
    
        //需求:有三个数,想知道最大的是哪个?
        /*
        int a = 2,b=3,c =4,max;
        if(a>b)
            max = a;
        if(max<b)
            max = b;
            System.out.println("max="+max);
        */
    
    class  OperateDemo1
    {
        public static void main(String[] args) 
        {
            int a=3,b=40,c=5;
            int max;
            if(a>b)
                max = a;
            else
                max = b;
            if(max<c)
                max = c;
            else
                max = b;
            System.out.println("max="+max);
            
    
        }
    }
  • 相关阅读:
    Well, that was fun! An adventure in WCF, SSL, and Host Headers (转)
    算法还重要吗?
    Silverlight测试——利用Ranorex实现数据驱动测试
    MSSQl分布式查询
    Silverlight 4 CHM中文离线文档已提供下载
    快速打包你的应用程序——Inno Setup
    IE 9 Beta 测试Bug
    IE 9 Bate 泄露版
    Windows PowerShell初体验——.NET对象支持
    多样化实现Windows Phone 7本地数据库访问<2>
  • 原文地址:https://www.cnblogs.com/sun-/p/4958631.html
Copyright © 2020-2023  润新知