zoukankan      html  css  js  c++  java
  • 《程序员面试宝典》编程技巧--位运算

    1. 判断一个整数是否是2的N次方:

    x&x-1

    如果X为2的N次方,例如二进制1000,结果就会为0。这个方法非常巧妙,还可以用来判断一个整数中,二进制表示中1的个数,如下:

    int count = 0;
    输入m;
    while(m)
    {
         count++;
         m=m&(m-1);
    }

    每执行一次,会把m中最低位的1清零。所以最终count最终就得到m中1的个数。

    2. 不用判断语句求a、b中的最大值:

    int max = ((a + b) + abs(a-b)) / 2;
    int tmp=a+b;
    char * strs[2] = {"a大",“b大”}
    tmp = unsigned(tmp) >> (sizeof(int)*8 - 1);
    cout <<strs[c]<<endl;

    这里利用了负数,最高位符号为1的特性。如果b大于a,tmp就为负数,利用无符号数的右移位(高位补零),留下tmp最高位,即符号位。

    3. 不使用中间变量交换a、b的值:

    a = a + b;
    b = a - b;
    a = a - b;

    a + b得到的结果可能会越界。下面的方法则不会存在这样的问题。

    a = a ^ b;//异或
    b = a ^ b;
    a = a ^ b;

    4.计算机内部数的表示---二进制运算

    int b = 0x80000000//为-2147483648

    对于0:原码有两种表示方法;
    [+0]=0x00000000;

    [-0]=0x80000000;

    对应的反码也有两种表示。

    不过补码只有一种:

    [+0]=[-0]=0x0000000;

  • 相关阅读:
    Linux系统中的load average
    通过数据库评估存储设备IO性能-Oracle11gIO校准功能介绍
    ORACLE查询字段中含有空格的数据
    JavaScript&Typescript中的时间
    LeetCode
    LeetCode
    面试问题及知识汇总
    Bootstrap布局容器与栅格系统
    JVM垃圾回收(GC)
    9. 专题
  • 原文地址:https://www.cnblogs.com/XDJjy/p/3894967.html
Copyright © 2011-2022 走看看