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);
}
}

 

posted @ 2018-08-10 15:32  wooyoohoo  阅读(123)  评论(0)    收藏  举报