• java中的位运算符


    package com.woo;
    
    /*****************[计算器中定点数的表示方式]**************************/
    //原码、反码和补码
    //在计算机内,定点数有3种表示法:原码、反码和补码
    //原码:就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
    //反码:表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,[但符号位除外]。
    //补码:表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1
    
    /*****************[在Java中所有数据的表示方法都是以补码的形式表示]**************************/
    //补码的最高位是符号位,最高位为“0”表示正数,最高位为“1”表示负数。
    //正数的补码是其本身,负数的补码是其绝对值(即正数)取反加1。这里是各位取反,包括了符号位,注意与反码的区别
    
    public class Home {
    
    public static void main(String[] args) {
    
    //一个字节是8位,最高位为符号位0代表正数1代表负数
    byte i = 1; //00000001
    byte j = 2; //00000010
    
    //移位 [向左移动两位 表示:1x2*2] 
    System.out.println(i<<2); //00000100 = 4
    
    //移位 [向右移两位 表示:1/(2*2),结果转换为了int所以为0] 
    System.out.println(i>>2); //00000000 = 0
    
    //与 [不同出0,数字1的二进制和数字2的二进制,每一位进行与运算,得到 00000000]
    System.out.println(i&j); //00000000 = 0
    
    //或 [有1即为1,数字1的二进制和数字2的二进制,每一位都按照该规则进行运算,得到 00000011]
    System.out.println(i|j); //00000011 = 3
    
    //异或 [不同出1,数字1的二进制和数字2的二进制,每一位进行异或运算,得到 00000011]
    System.out.println(i^j); //00000011 = 3
    
    /*
    * 非 [~在java中即对每一位都进行反转,即1变为0,0变为1,得到 11111110,这个是源码。在java中都是以补码的方式表示数据的,因为二进制11111110的最高位为1,即为负数。
    * 因为在java中,负数的补码是其绝对值(即正数)取反加1,那么就是:
    * 11111110的绝对值为:01111110
    * 取反[java中取反为每一位都取反]:1111110 取反得到 10000001
    * 再加1得到补码:10000010 [最高位为符号位,刚好为 -2]
    */
    System.out.println(~i);
    }
    }
  • 相关阅读:
    八 sizeof枚举
    九 推算程序结果
    十 交换变量特殊写法
    十一 移位-加减优先级 define undef
    十二 部分易忽略的优先级优先级
    十三 C语言的#特殊用法
    十四 访问数组:指针形式,下标形式
    VS出现未加载wntdll.pdb的解决办法
    C++继承产生的问题
    opencv加载图片imread失败的原因
  • 原文地址:https://www.cnblogs.com/wooyoohoo/p/9455291.html
Copyright © 2020-2023  润新知