Android从零开发之java-二进制

package test;
/*
 * 作者:钟志钢
 * 内容:二进制(原码,反码与补码),位算符,移位运算
 * 时间: 2013-1-23
 * 1. >> 算术右移 ,符号位不变,低位溢出,并用符号位补缺少高位
 * 		 << 算术左移 , 符号位不变,低位补零
 * 		>>> 逻辑右移, 低位溢出,高位补0
 * 2,位运算:~1,  按位取反 ,(0-->1, 1-->0)
 * 			-3^3   按位异或,一个为0, 一个为1,则为1;
 * 			1&3 , 按位与,两位全为1.则结果为1;
 * 			1|3 , 按位或, 两位有一个为1, 则为1;
 * 3,二进制反补码规则:对于有符号的而言;
 * 		1,最高位是符号符号位,0是正,1为负。
 * 		2,正数或0的原码,反码与补码都一样。
 * 		3,负数的反码=它的原码符号位不变,其它取反(0-->1, 1-->0)
 * 		4,负数的补码=反码 + 1;
 * 		5, java中没有无符号数,即java中的数都是有符号数
 * 		6, 计算机运算时都是以补码的方式运算的;
 * 
 * 
 * 
 */
public class 二进制 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		二进制 er = new 二进制();

	}
	public 二进制 (){
		//移位运算
		byte a = 1 >> 2;//低位溢出,并用符号位补缺少高位
		//1 --> 00000001 -补码-> 00000001 -移位-> 00000000.01 --> 00000000 = 0
		byte aa = 8 >> 2;//低位溢出,并用符号位补缺少高位
		//8 --> 00001000 -补码-> 00001000 -移位-> 00000010.00 --> 00000010 = 2=8开平方
		byte b = -1 >> 2;
		//-1 --> 10000001 -补码-> 11111111 -移位-> 11111111.11 -补码-> 10000001 = -1
		byte c = 1 << 2;//高位溢出,0补低位
		//1 --> 00000001 -补码-> 00000001 -移位-> 00000100 --> 4 = 2平方
		byte d = -1 << 2;
		//-1 --> 10000001 -补码-> 11111111 -移位-> 11111100 -补码-> 10000100 = -4
		byte e = 3 >>> 2;//低位溢出,高位补0
		//3--> 00000011 -逻辑移位-> 00000000,11--> 00000000=0 
		int ee = -3 >>> 2;//低位溢出,高位补0
		//3--> 1000-24个0-0011 -->111-24个1-11101-逻辑移位-> 0011-24个1-1111,01--> 0011-24个1-1111 
		System.out.println("a(1 >> 2)= " + a);
		System.out.println("b(-1 >> 2)= " + b);
		System.out.println("c(1 << 2)= " + c);
		System.out.println("d(-1 << 2)= " + d);
		System.out.println("e(3 >>> 2)= " + e);
		System.out.println("ee(-3 >>> 2)= " + (-3 >>> 2));
		//二进制计算过程
		byte f = 1;
		byte g = 2;
		/*f = 00000001;//byte为一个字节,八位
		 *g = 00000010
		 *f - g --> f + (-g)
		 *-g = 10000010
		 *首先对g取反为:11111101
		 *再取补码:       11111110
		 *f的反码为本身00000001
		 *f - g =     11111111
		 *再取反回来:  10000000 --> 10000001
		 *即 f - g = -1
		 */
		
		//位运算:
		byte h = ~2;
		//2 --> 00000010 -取反-> 11111101 -补到原先取反-> 10000010 -再加1-> 10000011 --> 3
		byte i = 2 & 3 ;//两个为1则为1,否则为0
		//2 --> 00000010, 3 --> 00000011; 2 & 3 = 00000010 --> 2
		byte j = 2 | 3;//只要有一个为1就为1,否则为0
		//2 --> 00000010, 3 --> 00000011; 2 | 3 = 00000011 --> 3
		byte k = ~-5;
		//-5--> 10000101 -补码-> 11111011-取反-> 00000100 -补码-> 00000100 --> 4
		byte l = 13 & 7 ;
		byte m = 5 | 4;
		byte n = -3 ^ 3;//不同则为1,相同则为0
		//-3 --> 10000011 -补码-> 11111101,3-->00000011,-3^3-->11111110-补码->10000010 = -2
		System.out.println("h(~2)= " +h);
		System.out.println("i(2 & 3)= " +i);
		System.out.println("j(2 | 3)= " +j);
		System.out.println("k(~-5)= " +k);
		System.out.println("l(13 & 7)= " +l);
		System.out.println("m(5 | 4)= " +m);
		System.out.println("n(-3 ^ 3)= " +n);
	}
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值