高级程序设计第四版 有感而发。

实际中用不到,当科普得了。

小技巧

判断奇偶

• 偶数 8 & 1 = 0
• 奇数 9& 1 =1
• 原理是:
• 二级制1是一堆0和最后一个1组成。 00000001
• 二级制最后一位是 2^0 是否存在。奇数是存在的,所以是1,偶数也就是0
• 结论:偶数0,奇数1
• 两真为真。遇到0一定是0,都是1才是真。结果取决于最后一位数字
• 因此奇数一定是1

值交换,不占空间:

  1. var a=6
  2. var b=9
  3. a^=b
  4. b^=a
  5. a^=b
  6. // aba操作三次。
  7. a//9
  8. b//6

取整:

  • 5.55>>0 或者整数

    位操作符

~操作符

  1. // ~ 非
  2. let num1 = 25 //二进制00000000000000000000000000011001
  3. let num2 = ~num1 //二进制11111111111111111111111111100110
  4. // 作用是全部取反
  5. // 等效为 数值去反并减一
  6. // -25 -1 == -26
  7. let num3 = -num1 -1
  8. // 效果一样 但操作速度快

&操作符

  1. // %
  2. // 两个数字对齐,然后求真
  3. let r = 25 & 3 // 1
  4. 25 =00000000000000000000000000011001
  5. 03 =00000000000000000000000000000011
  6. ---
  7. and=00000000000000000000000000000001
  8. 得到的结果是 1

小技巧:

判断奇偶

  • 偶数 8 & 1 = 0
  • 奇数 9& 1 =1
  • 原理是:
    • 二级制1是一堆0和最后一个1组成。 00000001
    • 二级制最后一位是 2^0 是否存在。奇数是存在的,所以是1,偶数也就是0
    • 结论:偶数0,奇数1
    • 两真为真。遇到0一定是0,都是1才是真。结果取决于最后一位数字
    • 因此奇数一定是1

| 或操作符

  1. // | 求或,一真则真
  2. 25=00000000000000000000000000011001
  3. 03=00000000000000000000000000000011
  4. ---
  5. OR=00000000000000000000000000011011
  6. // 原理都懂 555

异或 ^

  1. // 一假为真
  2. 25= 00000000000000000000000000011001
  3. 03= 00000000000000000000000000000011
  4. ---
  5. XOR=00000000000000000000000000011010

小技巧两值交换,不占空间:

  1. var a=6
  2. var b=9
  3. a^=b
  4. b^=a
  5. a^=b
  6. // aba操作三次。
  7. a//9
  8. b//6

左移 <<

  1. // 指定位数向左移动 正负号不变
  2. // 2<<5 == 64
  3. 2 = 10
  4. 64= 10 00000

右移

也一样,只不过注意负数差异性会很大,注意即可。这里应当贴一个小技巧。

无符号右移 >>>

数字变成二进制、丢次低位补0,因此总是非负数。
如果本来就是非负数,和 >> 没区别

取整:

  • 5.55>>0 或者整数

-1 其他

本文大量参考了红宝书,你可以移步到这里看到的笔记总结: 《高级程序设计 第四版》

rgb 和 hex 互相换算:

  1. function hexToRGB(hex: string): string{
  2. const hexx = hex.replace('#', '0x')
  3. const r = hexx >> 16
  4. const g = hexx >> 8 & 0xff
  5. const b = hexx & 0xff
  6. return `rgb(${r}, ${g}, ${b})`
  7. }
  8. function RGBToHex(rgb: string): string{
  9. const rgbArr = rgb.split(/[^\d]+/)
  10. const color = rgbArr[1] | rgbArr[2] << 8 | rgbArr[3]
  11. return `#${color.toString(16)}`
  12. }