java学习(11)位与进制
原创
©著作权归作者所有:来自51CTO博客作者水亦心824的原创作品,请联系作者获取转载授权,否则将追究法律责任
* @笔记:
* 一、二进制
* 1.原码,反码,补码
* (1)二进制最高位是符号位,0表示正数,1表示负数。
* (2)正数的原码,反码,补码都是一样的。
* (3)负数的反码是原码除符号位不变,其他位取反。
* (4)负数的补码 = 负数的反码 + 1.
* (5)0的反码和补码都是0。
* (6)java没有无符号数。
* (7)在计算机运算时,都是以补码的方式运算。
* 例: 1-2 = 1+(-2) => 0000 0001 + 1000 0010 (原码)=> 0000 0001 + 1111 1110(补码)
* 0000 0001
* + 1111 1110
* = 1111 1111 (补码) => 1000 0001(原码) => -1
* 2.基本运算
* &(按位与),|(按位或),^(按位异或),~(按位取反)
* 移位运算符:
* >>算数右移:低位溢出,符号位不变,并用符号位补溢出的高位
* <<算数左移:高位溢出,符号位不变,低位补0。
* >>>逻辑右移:低位溢出,高位补0。
*
*/
package com.shuiyixin1;
public class learnJ_002weiyunsuan {
/**
* @作者:shuiyixin
* @日期:2018.01.31
* @内容:位运算,二进制,移位运算符
*
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
byte a = 1>>2; //0
//1的补码是0000 0001,右移两位变成:0000 0000,即0
byte b = -1>>2; //-1
//-1的补码是 1111 1111,右移两位变成1111 1111,化为原码得:1000 0001,即-1
byte c = 1<<2; //4
//1的补码是0000 0001,左移两位变成:0000 0100,即4
byte d = -1<<2; //-4
//-1的补码是 1111 1111,左移两位变成1111 1100,化为原码得:1000 0100,即-4
byte e = 1>>>2; //0
//1的补码是0000 0001,右移两位变成:0000 0000,即0
System.out.println("1>>2 = " + a);
System.out.println("-1>>2 = " + b);
System.out.println("1<<2 = " + c);
System.out.println("-1<<2 = " + d);
System.out.println("1>>>2 = " + e);
System.out.println("1>>2 = " + (~2));
System.out.println("-13>>2 = " + (-13>>2));
}
}