天天看点

剑指offer--3

前言:继续学习剑指offer!!!

面试题10:  

剑指offer--3

这道题相对简单,但要对位运算了解。

位运算大体上只有5种运算,总结如下:

  • 按位与 “&”:

将参与运算的两操作数各对应的二进制位进行与

操作,只有对应的两个二进位均为1时,结果的对

应二进制位才为1,否则为0。

        通常用来将某变量中的某些位清0且同时保留其他位不变。

也可以用来获取某变量中的某一位。

例如,如果需要将int型变量n的低8位全置成0,而其余位

不变,则可以执行:

        n = n & 0xffffff00;

  • 按位或“|”:

按位或运算通常用来将某变量中的某些位置1且保

留其他位不变。

例如,如果需要将int型变量n的低8位全置成1,而

其余位不变,则可以执行:

n |= 0xff;

0xff: 1111 1111

  • 按位异或 “^”

    按位异或运算通常用来将某变量中的某些位取反,

    且保留其他位不变。

    例如,如果需要将int型变量n的低8位取反,而其

    余位不变,则可以执行:

    n ^= 0xff;

  • 左移操作符<<

实际上,左移1位,就等于是乘以2, 左移n位,就等于

是乘以2n。而左移操作比乘法操作快得多。

例如:

9 << 4 相当于9乘16

结果:144

  • 右移操作符 >>

实际上, 右移n位,就相当于左操作数除以2n,并且将

结果往小里取整。

例如:

-25 >> 4 = -2 -25除以16等于负1.几,往小里取整,-2更小

-2 >> 4 = -1

18 >> 4 = 1

#include<stdio.h>

int NumberOf1(int n)
{
    int count=0;
    while(n)
    {   
        if(n&1)
            count++;
        n = n >>1;
    }   
    return count;
}

int main()
{
    int n;
    puts("please input your number:");
    scanf("%d",&n);
    printf("numOf1:%d\n",NumberOf1(n));

    return 0;
}      

面试题11:

剑指offer--3

注:比较简单,不写了。注意位运算比加减乘除快!!!

面试题12:

剑指offer--3

注:要考虑到n很大的情况.

这个学习要先耽误一段时间,有新需求要做,而且还要交接员工离职留下的任务!!!

作者:

柳德维

出处:

https://www.cnblogs.com/liudw-0215/

-------------------------------------------

个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!

如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ⁾⁾!

继续阅读