title: js-取反
date: 2019-06-13 14:24:08
tags:
categories: "2019-06"
正常的取反操作采用 ~ 就可以進行
原來的一個誤解: 如下
正常的取反操作, 應該采用 掩碼 異或的方式進行,
比如 取2的反, 應該用 3 ^ 2 進行 (3 是全1的操作)
參考網址:
https://segmentfault.com/q/1010000005697515
實際上比如
2&(~2) // 結果為0, 如果按照我當初的理解, ~2為-3, 那么應該為 -11, 所以結果不會是0
實際上是0, 說明什么呢? 說明在計算機中的運算是正確的.
對於取反操作一直都是按照實際的存儲進行的,
在計算機中是按照補碼的方式進行存放的.
- 整數的補碼與原來的相同
- 負數的補碼需要除符號位取反+1
同理, 如果是一個實際的計算機中的二進制轉換為我們的數據的話, 需要 -1, 然后取反.
示例
2的取反(not 反碼)
比如 2, 首先補碼, 然后取反.(此時在計算機中就已經完成了, 但是為了按照10進制顯示以及讀取, 所以需要按照 -1, 取反的順序進行處理)
//按照8位進行處理
2 => 00000010 => 11111101
=> 11111100(-1操作) => 10000011 (即 -3)
所以 2 的取反直接展示上就是 -3, 但是在計算機中展示的就是 (11111101)
如果 2 & (~2) 自然就是 0
-2 的取反 (not 反碼)
//按照8位進行處理, 首先負數在計算機中的存儲是以反碼的形式, 所以先處理為反碼
-2 => 10000010 => 11111101 => 11111110(+1)
=>00000001(取反) => 1(轉換為10進制)
程序員從來不看比例, 只看有無
