Java bit operation (1)

/**
 * 1. 二进制的最高位是符号位:0表示整数,1表示复数
 * 2. 正数的原码,反码,补码都一样(三码合一)
 * 3. 负数的反码 = 它的原码符号位不变,其他位取反(0->1,1->0)
 * 4. 负数的补码 = 它的反码 + 1,负数的反码 = 负数的补码 - 1 
 * 5. 0的反码,补码都是0
 * 6. java没有无符号数,换言之,Java中的数都是有符号的
 * 7. 在计算机运算的时候,都是以补码的方式来运算的
 * 8. 当我们可能运算结果的时候,要看它的原码
 */
//位运算
//按位与&  :  两位全为1,结果为1,否则为0
//按位或|  :  两位有一个为1,结果为1,否则为0
//按位异或^:  两位有一个为0,一个为1,结果为1,否则为0
//按位取反~:  0->1,1->0
 public class BitOperator{
 	public static void main(String[] args){
 		//推导
 		//1. 2的原码  00000000 00000000 00000000 00000010
 		//   3的原码  00000000 00000000 00000000 00000011
 		//2.         00000000 00000000 00000000 00000011 运算后的补码
 		//3. 转换为最终的原码,正数三码合一,结果为3       
 		System.out.println(2|3);

        //推导
        //1. 2的原码  00000000 00000000 00000000 00000010
        //   3的原码  00000000 00000000 00000000 00000011
        //2.         00000000 00000000 00000000 00000001 运算后的补码
        //3. 转换为最终的原码,正数三码合一,结果为1
        System.out.println(2^3);

        //推导
        //1. 2的原码  00000000 00000000 00000000 00000010
        //   3的原码  00000000 00000000 00000000 00000011
        //2.         00000000 00000000 00000000 00000010 运算后的补码
        //3. 转换为最终的原码,正数三码合一,结果为1
        System.out.println(2&3);

        //推导
        //1. -2的原码  10000000 00000000 00000000 00000010
        //2. -2的反码  11111111 11111111 11111111 11111101
        //3. -2的补码  11111111 11111111 11111111 11111110
        //4. ~-2操作   00000000 00000000 00000000 00000001 运算后的补码
        //3. 转换为最终的原码,正数三码合一,结果为1
        System.out.println(~-2);

        //推导
        //1. 2的原码  00000000 00000000 00000000 00000010
        //2. ~2操作   11111111 11111111 11111111 11111101
        //3. 运算后的反码  11111111 11111111 11111111 11111100
        //4. 运算后的原码  10000000 00000000 00000000 00000011 ,结果为-3
        System.out.println(~2);
 	}
 } 

 

Guess you like

Origin blog.csdn.net/Danelxiong/article/details/127826223