zoukankan      html  css  js  c++  java
  • 原码,反码,补码

    按位与

    //计算机在运算的时候,都是按照补码方式运算的,所以要得到2的补码;
    一,先得到2的补码
    //(1)先得到2的源码:                            00000000 00000000 00000000 00000010
    二,得到2的补码
    //(2)因为2是正数,由于正数是三码合一,所以源码,和补码相同
    //(3)所以2的补码;                              00000000 00000000 00000000 00000010
    
    三.得到3的补码
    //(4)得到3的源码:                              00000000 00000000 00000000 00000110
    四,得到3的补码
    //(5)因为3是正数,由于正数是三码合一,所以源码,和补码相同
    //(6)3的补码:                                  00000000 00000000 00000000 00000110
    五,按位与&
    //(7)2的补码和3的补码按位 &, 位全是1结果才是1
    // (8)2的补码:  00000000 00000000 00000000 00000010
    // (9)3的补码:  00000000 00000000 00000000 00000110
    //(10)按位&     00000000 00000000 00000000 00000010 得到了补码
    
    六.把2&3按位与的结果转为源码
    // 计算结果要看源码,所以把上面计算完的补码转为源码,由于正数是三码合一,所以源码,和补码相同
    // 所以源码不变是:00000000 00000000 00000000 00000010 = 2
            System.out.println(2&3);
        }
    }
    

    负数按位取反

    public class BitOpenator01  {
        public static void main(String[] args) {
    
            //一.先得到-2的源码:                                10000000 00000000 00000000 00000010
            //二.得到补码
            // (1)计算的时候是按照补码计算的,所以要的到补码
            // (2)由于-2是负数,要想得到-2的补码,要先得到-2的反码;通过反码+1得到补码
            // (3)获取正数补码:
                    // <1>正数的反码=正数的原码符号位不变,其他位取反
                    // <2>正数的补码=正数的反码+1
            // (4)-2的反码计算: -2的原码符号位不变,其他位取反       11111111 11111111 11111111 11111101
            // (5)-2的补码计算: 反码+1                          11111111 11111111 11111111 11111110
            // (6) -2的补码是:                                 11111111 11111111 11111111 11111110
            //三.~-2操作:
            // (7) -2是负数,负数按位取反, 0变1,1变0
            // (8) ~-2按位取反后的结果是补码:                    00000000 00000000 00000000 00000001
            // 四.原码的计算
            // (8) 转换完的结果是正数,原码,反码,补码相同           00000000 00000000 00000000 00000001 = 1
            System.out.println(~-2);  //1
        }
    }
    

    正数按位取反

    public class BitOpenator01  {
        public static void main(String[] args) {
            //一.先得到2的源码:                                   00000000 00000000 00000000 00000010
            //二.得到补码
            // (1)计算的时候是按照补码计算的,所以要的到补码,由于2是正数,补码,原码,反码相同
            // (2)原码是:                                        00000000 00000000 00000000 00000010
            //三.~2按位取反
            // (3)得到取反运算后的补码                             11111111 11111111 11111111 11111101
            // (4)结果是一个负数,因为结果是负数,不是三码和合一,想看结果要转成原码
            // 四.原码的计算
            // (5)负数转原码
            //          <1>负数的反码=负数的补码-1
            //          <2>负数原码=负数反码,符号位不变,其他位取反
            // (6)反码的计算=负数的补码-1                          11111111 11111111 11111111 11111100
            // (7)原码的计算=负数反码,符号位不变,其他位取反           10000000 00000000 00000000 00000011 = -3
            System.out.println(~2);
        }
    }
    
  • 相关阅读:
    部门创建注意问题
    我的技术博客开通啦~
    听侯钟雷老师的讲座,确认了几个问题。
    Dynamics CRM 批量添加用户时,报错:Server was unable to process request.
    汉字的Unicode范围(转)
    转载:Apache1.1 post请求无body的bug
    转载:Android有效解决加载大图片时内存溢出的问题
    2.2之前的webkit crash问题
    转载:Expect:100Continue & HTTP 417 Expectation
    城市旅游问题
  • 原文地址:https://www.cnblogs.com/john5yang/p/15700582.html
Copyright © 2011-2022 走看看