随笔:位运算举例

来源:互联网 发布:json key 数字 编辑:程序博客网 时间:2024/05/19 13:43
package given.come.test;/** *  * @author Given * */public class BitShiftDemo {public static void main(String[] args) {/** * 如果首位是正数,源码、反码、补码一样, * 负数的话,源码取反得到反码,反码+1进位形成补码 * 然后再进行位运算 */int a=-16,b=16;//定义整型变量a,赋初值为-16,定义整型变量b,赋初值为16,System.out.println("**************************************");System.out.println("a的二进制为:\t"+Integer.toBinaryString(a));//将整型a转换为二进制并输出System.out.println("a左移1位后各位为:\t"+Integer.toBinaryString(a<<1));//a位运算左移1位后,装换为二进制并输出System.out.println("\t\t"+a+"a<<2="+(a<<2));//输出a通过位运算左移两位后得到的十进制数 //源码10000000000000000000000000010000-16    //反码11111111111111111111111111101111+1    //补码11111111111111111111111111110000/*1210^21200    2^2    11111111111111111111111111000000    11111111111111111111111110111111    10000000000000000000000001000000*/System.out.println("**************************************");System.out.println("a的二进制为:\t"+Integer.toBinaryString(a));//将整型a转换为二进制并输出System.out.println("a右移1位后各位为:\t"+Integer.toBinaryString(a>>1));//a带符号右移1位后,转换为二进制并输出System.out.println("\t\t"+a+"a>>2="+(a>>2));//输出a带符号右移2位后得到的十进制数//补码 11111111111111111111111111110000//右移1位 11111111111111111111111111111000//右移2位 10000000000000000000000000000100  -2^2=-4System.out.println("**************************************");System.out.println("a的二进制为:\t"+Integer.toBinaryString(a));//将整型a转换为二进制并输出System.out.println("a右移1位后各位为:\t"+Integer.toBinaryString(a>>1));//a带符号右移1位后,转换为二进制并输出System.out.println("\t\t"+a+"a>>>2="+(a>>>2));//输出a不带符号右移2位后得到的十进制数//补码 11111111111111111111111111110000//右移1位 11111111111111111111111111111000//不带符号右移2位001111111111111111111111111111001073741820System.out.println("**************************************");System.out.println("b的二进制为:\t"+Integer.toBinaryString(b));//将整型b装换为二进制并输出System.out.println("b左移1位后各位为:\t"+Integer.toBinaryString(b<<1));//b位运算左移1位后,转换为二进制并输出System.out.println("\t\t"+b+"<<2="+(b<<2));//输出b位运算左移2位后得到的十进制数//源码 00000000000000000000000000010000    2^4=16//00000000000000000000000000100000    左移1位   2^5=32//00000000000000000000000001000000    左移2位2^6=64System.out.println("**************************************");System.out.println("b的二进制为:\t"+Integer.toBinaryString(b));//将整型b装换为二进制并输出System.out.println("b右移1位后各位为:\t"+Integer.toBinaryString(b>>1));//b位运算右移1位后,转换为二进制并输出System.out.println("\t\t"+b+"b>>2="+(b>>2));//输出b位运算右移2位后得到的十进制数//源码 00000000000000000000000000010000    2^4=16//00000000000000000000000000001000 右移1位       2^3=8//00000000000000000000000000000100右移2位       2^2=4System.out.println("**************************************");System.out.println("b的二进制为:\t"+Integer.toBinaryString(b));//将整型b装换为二进制并输出System.out.println("b右移1位后各位为:\t"+Integer.toBinaryString(b>>1));//b位运算右移1位后,转换为二进制并输出System.out.println("\t\t"+b+"b>>>2="+(b>>>2));//输出b无符号右移2位后得到的十进制数System.out.println("**************************************");//源码 00000000000000000000000000010000     2^4=16//00000000000000000000000000001000 右移1位        2^3=8//00000000000000000000000000001000 无符号右移2位         2^2=4}}

原创粉丝点击