【算法&数据结构初阶篇】:位运算

算法中很多情况下需要用到各种位运算的转换,比如>>右移、<<左移、&与等等,下面我们利用这些位运算来进行一个进制转换,将一个int整形(32位)十进制转二进制,以及其他的一些转换技巧。

目录

一、十进制转换成32位的二进制

核心点就是将1进行左移操作,从高位32位开始依次向低位0位移动,分别与所需转换的整形数值做与运算 

一、代码:

 二、代码解析:

二、位运算技巧

一、随用随记的特殊技巧

 二、计算演练

一、负数二进制,计算转换得到其十进制:

 三、用位运算实现加减乘除,不能用到+ - * /符号

一、代码演示


一、十进制转换成32位的二进制

核心点就是将1进行左移操作,从高位32位开始依次向低位0位移动,分别与所需转换的整形数值做与运算 

一、代码:

public void printBinary(int num){
    //高位从右到左遍历,打印
    for(int i = 31; i >= 0 ; i--){
        //数值第一轮是与高位1做与运算, 两者为1 与 得1,一个不为1 与 得 0 
        System.out.print(num & (1 << i) == 0 ? 0 : 1)
    }
}

 二、代码解析:

  • 转换二进制,需要知道打印方向,从高位到低位,即从左往右依次打印
  • &与运算的技巧,  1  1 得 1,非1 得 0,所以原数值,若为1 , 与运算后仍为 1, 若为 0, 与运算后仍为0

二、位运算技巧

一、随用随记的特殊技巧

System.out.println((~-5)+1);  //5   -5的相反数为5  取反+1 
System.out.println((~5)+1);   //-5   5的相反数为-5  取反+1 
System.out.println(-1>>>1);   //2147483647  无符号右移,忽略最高位的符号位,即用0补齐最高位
System.out.println(-1>>1);    //-1         带符号右移,负数最高位符号位是 1, 右移后仍用1补齐
printBinary(-1);                    //打印-1二进制  11111111111111111111111111111111

System.out.println(70 & 63);   // 6  即num % 64 等价与 num & 63 因为64二进制是1000000 模64后余数就是后六位的二进制数, 取后6位的技巧,与运算 111111  即 63  与运算1 1得1 这样就得到num的余数了 所以等价于模 
System.out.println(70 % 64);   // 6
System.out.println( 2 ^ 2 ) ; // 0  自己异或自己为0,异或运算,相同为0 不同为1,相当于 无进位相加

 二、计算演练

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值