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 ;
