js-取反



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. 整數的補碼與原來的相同
  2. 負數的補碼需要除符號位取反+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進制)

程序員從來不看比例, 只看有無


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM