当前位置:编程学习 > JAVA >>

Android从零开发之java-二进制

[java]  
package test;  
/* 
 * 作者:钟志钢 
 * 内容:二进制(原码,反码与补码),位算符,移位运算 
 * 时间: 2013-1-23 www.zzzyk.com
 * 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);  
    }  
}  
 
补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,