C语言进制与位运算

2018-09-02  本文已影响0人  AuglyXu

进制

     * 12
     *  2
     * ---
     *  6   0
     *  2
     * ---
     *  3   0
     *  2
     * ---
     *  1   1
     *  2
     * ---
     *  0   1
     *
     * 12 --> 1100

     * 十进制转换八进制
     * 规则: 除8取余, 余数倒叙
     *
     * 24
     *  8
     * ---
     *  3  0
     *  8
     * ---
     *  0  3
     *
     * 24 --> 30

源码 反码 补码

注意点


位运算符

   9 & 3 = ?
   0000 0000 0000 0000 0000 0000 0000 1001 // 9的补码
 & 0000 0000 0000 0000 0000 0000 0000 0011 // 3的补码
 -----------------------------------------------
  0000 0000 0000 0000 0000 0000 0000 0001 // 1

   12 & 8
   0000 0000 0000 0000 0000 0000 0000 1100
 & 0000 0000 0000 0000 0000 0000 0000 1000
 -----------------------------------------------
   0000 0000 0000 0000 0000 0000 0000 1000

  9 | 3 = ?
  0000 0000 0000 0000 0000 0000 0000 1001 // 9的补码
| 0000 0000 0000 0000 0000 0000 0000 0011 // 3的补码
  -----------------------------------------------
  0000 0000 0000 0000 0000 0000 0000 1011
~9 = ?
      0000 0000 0000 0000 0000 0000 0000 1001 // 9的补码
     ~1111 1111 1111 1111 1111 1111 1111 0110 // 结果的补码
      0000 0000 0000 0000 0000 0000 0000 0001
      -------------------------------------------
      1111 1111 1111 1111 1111 1111 1111 0101 // 结果补码的反码
      1000 0000 0000 0000 0000 0000 0000 1010 // 结果的源码 -10
9 ^ 3 = ?
      0000 0000 0000 0000 0000 0000 0000 1001 // 9的补码
     ^0000 0000 0000 0000 0000 0000 0000 0011 // 3的补码
      -------------------------------------------
      0000 0000 0000 0000 0000 0000 0000 1010 // 10

一些规律和应用场景


左移和右移


案例

#include <stdio.h>

int main()
{
    /*
     * 需求: 交换两个变量的值
     *
     * int a = 10; int b = 20;
     */

    int a = 10;
    int b = 20;
    printf("交换之前a = %i, b = %i\n", a, b);
//    int temp = a;
//    a = b;
//    b = temp;
//    printf("交换之后a = %i, b = %i\n", a, b);

//    a = a + b; // a = 10 + 20; a = 30;
//    b = a - b; // b = 30 - 20; b = 10;
//    a = a - b; // a = 30 - 10; a = 20;
//    printf("交换之后a = %i, b = %i\n", a, b);

//    a = a ^ b;
//    b = a ^ b; // b = a ^ (b ^ b);  b = 10;
//    a = a ^ b; // a = (a ^ a) ^ b ; a = 20;

     b = a ^ b;
     a = a ^ b; // a = a ^ a ^ b; a = b;  a = 20;
     b = a ^ b; // b = a ^ b ^ b; b = a;  a = 10;
    printf("交换之后a = %i, b = %i\n", a, b);
    return 0;
}
上一篇 下一篇

猜你喜欢

热点阅读