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 ;