首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C 語言邏輯非運算:!0x00 等於 0x01 的本質是布爾值到整數的隱式轉換

     編輯:程式設計疑難解答

現象與疑問

!0x00 == 0x01  // 為什麼結果是 1 (0x01) 而不是 0 (0x00)?

直覺認為:0x00 是 0,非 0 應為 0?

核心解釋

  1. 0x00 是整數常量 0(十六進制表示)。
  2. ! 是邏輯非運算符,操作數按標量語境求值:0 → false,非 0 → true。
  3. !0x00 即 !0 → true(邏輯真值)。
  4. C 語言中邏輯運算結果類型為 int,true 的整數表示是 1。
  5. 十六進制下 1 記作 0x01。

關鍵區別:邏輯非 vs 位元非

常見誤區澄清

「十六進制需要先轉二進制再邏輯運算」—— 錯誤。
邏輯運算直接作用於標量值,與進制表示無關。0x00、0、00(八進制)在語義上完全等價,都是整數 0。

進階:_Bool / stdbool.h 類型

#include 
bool b = !0x00;  // b = true (1)
printf("%d", b); // 輸出 1
// C99 起 _Bool 佔 1 字節,值域 0/1,邏輯運算結果可隱式轉換

總結口訣

「邏輯非看真假,結果只能 0 或 1;位元非翻每位,寬度跟著類型走。」

搞清 ! 與 ~ 的本質區別,十六進制、八進制、十進制在邏輯運算面前「一視同仁」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
運算符名稱操作對象結果類型示例
!邏輯非標量(整體真假)int (0 或 1)!0x00 = 1, !0x12 = 0
~位元非 (按位取反)每個二進制位與操作數類型同寬~0x00 = 0xFF (8位), ~0x0000 = 0xFFFF (16位)