计算机基础(原码补码 负号运算)

package javabasis;

import org.junit.Test;

public class NO1Symbols {

    /*
    * 首先介绍  原码 反码 补码 移码的计算 及使用
    *
    *
    * 例:
    *   -15
    *
    *   每次除以2取余数
    *
    *   15 2 7 1
    *   7  2 3 1
    *   3  2 1 1
    *   1 2  0 1
    *
    *   补齐8位   第一位为符号位,0正数,1负数
    *   原码: 10001111  (原码还原  1*2^0 + 1*2^1 + 1*2^2 + 1*2^3 + 0*2^4 = 1 + 2 + 4 + 8 + 0 = 15 符号位为负数)
    *   反码: 11110000  (除了符号位,按位取反)
    *   补码: 11110001  (反码+1)
    *   移码: 01110001  (符号位取反)  一般用于比较大小
    *
    *   原码+补码=0   一般进行减法计算都是加上减数的补码.
    * */


    /*
    * 一些运算符的使用
    * >> <<
    * >>>
    * &&
    * &
    * ||
    * |
    *
    * */

    @Test
    public void test() {
        /*
        * >> << 转化为2进制后,整体进行移位  00000010(2) 00000100(4),  即为翻倍或者折半
        * */

        int num1 = 4;
        System.out.println(num1 >> 1); //2
        System.out.println(num1 >> 2); //1
        System.out.println(num1 << 2); //16

        int num2 = -4;
        System.out.println(num2 >> 1); //-2
        System.out.println(num2 >> 2); //-1
        System.out.println(num2 << 2); //-16

        /*
        * >>>   没有<<<
        * 作用是忽视符号进行移位
        *
        * 对于整体进行扩展,负数补1 正数补0
        * */

        int num3 = 4;
        System.out.println(num3 >>> 1); //2
        System.out.println(num3 >>> 2); //1
//        System.out.println(num3<<<2); 直接报语法错误

        int num4 = -4;
        System.out.println(num4 >>> 1); //2147483646
        System.out.println(num4 >>> 2); //1073741823


        /*
        *
        * && &   区别,是否继续进行后续的运算
        *
        * || |
        * */

        boolean b1 = true;
        boolean b2 = true;

/*        boolean result1 = (b1 = (1 == 2)) && (b2 = (1 == 2));
        System.out.println(b1 + " " + b2 + " " + result1);
        //false true false  由于(b1 = (1 == 2))先进行运算,已经判断false,(b2 = (1 == 2));不会继续运算*/

/*        boolean result1 = (b1 = (1 == 2)) & (b2 = (1 == 2));
        System.out.println(b1 + " " + b2 + " " + result1);
        //false false false  前后都会进行运算*/


/*        boolean result1 = (b1 = (1 == 1)) || (b2 = (1 == 2));
        System.out.println(b1 + " " + b2 + " " + result1);
        //true true true  由于(b1 = (1 == 1))先进行运算,已经判断false,(b2 = (1 == 2));不会继续运算*/

/*        boolean result1 = (b1 = (1 == 1)) | (b2 = (1 == 2));
        System.out.println(b1 + " " + b2 + " " + result1);
        //true false true  前后都会运算*/

    }

}

原文地址:https://www.cnblogs.com/yaoxublog/p/10940042.html