用位运算提高程序执行效率

        如我们所知,计算机只能够识别二进制形式的数据,所以我们编写的程序中各种数据类型都是先转换成二进制再进行相应的运算的,这样就带来了一定的时间、空间开销,而使用位运算则是直接对二进制形式的数据进行运算操作,免除了转化的繁琐,因此合理的运用位运算能显著提高代码在机器上的执行效率。


下面举一些可以应用到位运算的例子:

1、用移位运算(>>、<<)代替除2运算

2、用位与运算(&)代替取余运算(%) 判断是否是偶数


1、用移位运算(>>、<<)代替除2运算

一个整数除2相当于它的二进制形式右移1位, 即 / 2 等价于 >> 1。(ps. 这里还有一些小问题需要注意,见后文。)

                System.out.println("除法运算:");
                int num1 = 32;
                while(num1 != 0) {
                        System.out.print(num1 + " ");
                        num1 = num1 / 2;
                }

                System.out.println("\n移位运算:");
                int num2 = 32;
                while(num2 != 0){
                        System.out.print(num2 + " ");
                        num2 = num2 >> 1;
                }

我们来细看一下移位运算。

(1)左移运算符m << n 表示把m左移n位,在左移n位的时候,最左边的n位将被丢弃,同时在最右边补上n个0。

(2)右移运算符m >> n 表示m右移n位,在右移n位的时候,最右边的n位将被丢弃,but!左边不再只是补上n个0,

如果m是一个无符号数或是正整数,则左边补n个0;

如果m是一个负整数,则左边补n个1。

换言之,右移运算时左侧用原数的符号位补齐(无符号则补0)。

2、用位与运算(&)代替取余运算(%) 判断是否是偶数

判断一个数是不是偶数只需要判断它的二进制形式最右边一位是不是0即可,所以拿他和1做位与运算,如果结果是0,则是偶数,反之则是奇数。即,n % 2 == 0 等价于 (n & 1) == 0 ,注意由于==的优先级高于&,所以需要给与运算加上小括号。

示例代码:

                System.out.println("\n\n取余运算:");
                for(int i=0; i<6; i++){
                        if(i % 2 == 0){
                                System.out.println(i + "是偶数");
                        }else{
                                System.out.println(i + "是奇数");
                        }
                }

                System.out.println("\n\n位与运算:");
                for(int i=0; i<6; i++){
                        if((i&1) == 0){
                                System.out.println(i + "是偶数");
                        }else{
                                System.out.println(i + "是奇数");
                        }
                }

文中的代码是用Java编写的,但是位运算的技巧同样可以应用在其他语言中(如C、C++),用法都大同小异。

祝好各位!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值