Java算法之入门--位运算

位运算作为算法基础内容,但不少学java算法的小伙伴并不了解位运算的妙用。本章节浅浅的谈谈位运算是什么?

了解位运算之前,我们需要认识到,在计算机语言中,表示一个字符或数字,不是人类的常见十进制,反而是以二进制进行换算的。
二进制通俗来说,就是0和1组成。所在位数表示2的位数次方,累加为值。
这里以Java语言中Int数据类型举例,int在java中表示为32位的二进制数。

比如说,int number = 7 ;

在计算机中,number并不是十进制的数字7,而是以32进制数保存,如下所示:

number = 00000000000000000000000000000111

在此基础上,我们认识到,int数据类型在Java中的最大值或最小值就是±2的31次方
(这里为什么是31而不是32,详细解释比较麻烦,
                     可以理解为32位的首位表示该数的正负,后面31表示值)

那么,在这一知识的铺垫下,我们进入位运算的讲解。

位运算符:
  <<    表示向左移动     
  >>    表示向右移动

比如说,
1<<31 表示1向左移动31位,原位置用0填充;同理>>表示右移动
num<<n -----num的32进制数向左移动n个单位,同时右边补n个0
也就是说,将num的32进制数左移1位表示num值乘以2

仍然以数字7为例子,
number = 00000000000000000000000000000111 = 7
将1<<10 则 更新为:
number = 00000000000000000001110000000000 = 2^12+2^11+2^10

同样,在程序中如何检验?

public static void print(int num) {
		for (int i = 31; i >= 0; i--) {
			//遍历所有32位的数,用1去做&运算,如果说原为为1,则为1,其他全为0
			//达到打印任何一个num数的32位数的情况
			System.out.print((num & (1 << i)) == 0 ? "0" : "1");
		}
		System.out.println();
	}

补充知识: “与” 运算

& 与运算, 1&1=1 ; 1&0=0 ; 0&0=0 ; 0&1=0 ;

结尾:个人也是初学,如果内容有错误欢迎指正,还请各路大神轻喷!

经验分享 程序员 微信小程序 职场和发展