读书人

Android从0开发之java-二进制

发布时间: 2013-01-28 11:49:56 作者: rapoo

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 = 0byte aa = 8 >> 2;//低位溢出,并用符号位补缺少高位//8 --> 00001000 -补码-> 00001000 -移位-> 00000010.00 --> 00000010 = 2=8开平方byte b = -1 >> 2;//-1 --> 10000001 -补码-> 11111111 -移位-> 11111111.11 -补码-> 10000001 = -1byte c = 1 << 2;//高位溢出,0补低位//1 --> 00000001 -补码-> 00000001 -移位-> 00000100 --> 4 = 2平方byte d = -1 << 2;//-1 --> 10000001 -补码-> 11111111 -移位-> 11111100 -补码-> 10000100 = -4byte 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 --> 3byte i = 2 & 3 ;//两个为1则为1,否则为0//2 --> 00000010, 3 --> 00000011; 2 & 3 = 00000010 --> 2byte j = 2 | 3;//只要有一个为1就为1,否则为0//2 --> 00000010, 3 --> 00000011; 2 | 3 = 00000011 --> 3byte k = ~-5;//-5--> 10000101 -补码-> 11111011-取反-> 00000100 -补码-> 00000100 --> 4byte l = 13 & 7 ;byte m = 5 | 4;byte n = -3 ^ 3;//不同则为1,相同则为0//-3 --> 10000011 -补码-> 11111101,3-->00000011,-3^3-->11111110-补码->10000010 = -2System.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);}}

读书人网 >Android

热点推荐