首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言位運算實例:0 的按位取反為何等於 -1?

     編輯:關於C語言

C語言位運算實例:0 的按位取反為何等於 -1?

~ (按位取反) 將每個 0 變 1,1 變 0。

代碼驗證

#include <stdio.h>
int main() {
    int i = 0;
    int n = ~i;
    printf("%d\n", n); // -1
    return 0;
}

二進制推導 (32 位 int)

i    = 00000000 00000000 00000000 00000000
~i   = 11111111 11111111 11111111 11111111
       ↑ 符號位為 1 → 負數
補碼表示 -1 即為全 1

補碼定義回顧

  • 正數:補碼 = 原碼。
  • 負數:對應正數補碼取反 + 1。
  • -1 的補碼:+1 = 00...01 → 取反 11...10 → +1 → 11...11。

因此 ~0 == -1 在補碼機器上恆成立。

延伸:~x == -x-1

對任意整數 x,~x = -x - 1 (補碼下)。常用於無條件實現 -x:~x + 1。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved