黑马程序员_位运算

来源:互联网 发布:水准测量记录表数据 编辑:程序博客网 时间:2024/05/07 05:36


 ------- IOS培训、<a href="http://www.itheima.com" target="blank”>Mac、期待与您交流! —————


 1.按位与 &

     1001

     0101

     -----

     0001

   

       2. 按位或 |

     1001

     0101

     -----

     1101

       3.按位异或不相同为1,相同为0

     1.相同数值进行异或,结果肯定是0,比如9^9

     2.交换 9^5^6 == 9^6^5

     3.任何数值跟0进行异或,结果还是原来的数值,9^0 == 9

     4.a^b^a == a^a^b == 0^b == b

     

     1001

     0101

     -----

     1100

     4.按位取反 ~

     ~0000 0000 0000 0000 0000 0000 0000 1001

      1111 1111 1111 1111 1111 1111 1111 0110


   5.左移 <<     

     0000 0000 0000 0000 0000 0000 0000 0000

     00 0000 0000 0000 0000 0000 0000 100100

     

     9<<1 -> 9 * 21次方 == 18

     9<<2 -> 9 * 22次方 ==36

     9<<n -> 9 * 2n次方

   6.右移 >>

     0000 0000 0000 0000 0000 0000 0000 0000

     000000 0000 0000 0000 0000 0000 0000 10

     111111 1111 1111 1111 1111 1111 1111 10 

     

     8>>1 -> 8/2 == 4

     8>>2 -> 8/22次方 == 2

     8>>n -> 8/2n次方


           写一个函数,用来输出整数在内存中的二进制形式

void printBinary(int number)

{

    //记录现在挪到第几位

    // (sizeof(number)*8) - 1 == 31

   int temp = ( sizeof(number)<<3 ) -1;

   while ( temp >= 0 )

    {

        // 先挪位,再&1,取出对应位的值

       int value = (number>>temp) & 1;

        printf("%d", value);

       // 

        temp--;

        // 每输出4位,就输出一个空格

       if ( (temp + 1) %4 == 0 )

        {

            printf(" ");

        }

    }

    printf("\n");

}









0 0
原创粉丝点击