2020-04-26

算法:位运算

�十进制:逢十进一,生活中常见的数字。

二进制:逢二进一,计算机系统使用的数制,只有0、1。

八进制:逢八进一,采用0,1,2,3,4,5,6,7八个数字。在编程语言中通常以数字0开头表示八进制数

十六进制:逢十六进一,采用0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F 十六个数字。A-F表示 10-15,在编程语言中常用0x开头表示。


  • 按位或 "|"

    3 0011
    10 1010
    = 11 1011
  • 按位与 "&"

    3 0011
    10 1010
    = 2 0010
    • 判断奇偶

      (0111) (0110)

      可见 偶数末位都是0,奇数末位都是1。当 13&1=0001=1。便为奇数,反之=0000,便为偶数

    • 6

  • 按位异或 "^"

    3 0011
    10 1010
    = 9 1001
  • 按位取反 "~"

    即 将内存中的补码按位取反,包括符号位。

补码计算法定义:非负数的补码是其原码本身;负数的补码是其绝对值的原码最高位符号位不变,其它位取反,再加1。

  • 例如正数:9

    • 二进制: 0 1001

    • 补码: 0 1001

    • 按位取反: 1 0110 (符号位一起进行取反,补码的取反)

    • 减1得反码: 1 0101

    • 转原码。 1 1010 (反码取反就是原码)

    • =-10

  • 例如负数:-9

    • 二进制:1 1001
    • 反码: 1 0110 (符号位不变,取反)
    • 补码: 1 0111 (符号位不变,末位+1)
    • 补码取反: 0 1000 (符号位一起取反)
    • 转原码。 正数的补码,反码,原码都是一样的。
    • =10

所有正整数的按位取反都是其本身+1的负数。 ~8=-9

所有负整数的按位取反都是其本身+1的绝对值。 ~-8=9

0的按位取反是-1。0不是正负数哦

  • 位移(左/右移)">> <<"

    9>>1 右移1 0000 1001 0000 0100 = 4
    9<<1 左移1 0000 1001 0001 0010 = 18

你可能感兴趣的:(2020-04-26)