C語言中bool變數的深入理解

2022-09-24 17:18:10 字數 1318 閱讀 4818

目錄

在一些高階語言當中,為了能夠完成更好的邏輯判斷,因此就有了bool型別,bool型別的變數值只有true和false兩種。

而在c語言中,一般認為0為假,非0為真。

這是因為c99之前,c90是沒有bool型別的的。但是c99引入了_bool型別(_bool就是乙個型別,不過在新增標頭檔案stdbo程式設計客棧ol.h中,被重新用巨集寫成了 bool,為了保證c/c++相容性)。

目前為止大部分c語言書籍採用的標準還是c90標準,因此我們很少用bool型別。

可以看到,這裡的bool型別的大小和我們平時的真或假的大小是不一樣的。

下面是bool型別的原始碼:

可見,stdbool.h中定義了4個巨集,bool、true、false、__bool_true_false_are_defined。 其中bool就是 _bool型別,true和false的值為1和0,__bool_true_false_are_defined的值為1。

注意這裡的bool型別和char型別雖然都是1位元組,但是它們是不同的:char 中儲存字元,全域性變數初始值為'\0',bool 中存0或1,全域性變數預設初始化為0。

c語言中的邏輯表示式的返回結果,比如 a==b的返回結果,只有0和1兩種可能,但是它們的大小確是4,也程式設計客棧就是用整形表示真假:

另外,在vs2013中,微軟還給我們設計了大寫的bool型別,這個型別在vs2019中就被刪除了,bool型別將int進行了重新命名,因此它的大小是4個位元組。不推薦這種型別,因為這是微軟的標準,如果換到其他編譯環境則無法使用。

對於if條件的表示式,一般有以下三種寫法:

#incl程式設計客棧ude

int main()

if (pass == false)

if (pass)

return 0;

}之所以推薦使用第三種,因為if語句在開始使用時先要進行條件判定,而判定的正是括號()中表示式或函式的邏輯結果,這個邏輯結果只有真或假。

在這裡pass並沒有進行任何條件判定,所以pass本身就是邏輯結果,這樣就能反應出來flag是真或者假,這裡pass的值是0表示假,如果想要其表示真只需要加邏輯反!即可:!pass

如果要採nmxcw用bool型別:

#innmxcwclude

#include

int main()

if (pass != true)

if (!pass)

return 0;

}結論:bool型別,直接判定,不用操作符進行和特定值的比較。

c中的bool型就是0和1,因此可以用%d輸出,因此。。。**如下:

#include

void main()

深入理解C語言中的移位運算

深入理解c語言中的移位運算 移位運算 c語言還提供了一組移位運算,以便向左或者向右移動位模式。對於乙個位表示為 xn 1,xn 2,x0 的運算元x,c表示式x 有乙個相應的右移運算x k,但是它的行為有點微妙。一般而言,機器支援兩種形式的右移 邏輯右移和算術右移。邏輯右移在左端補k個0,得到的結果...

深入理解C語言 深入理解指標

關於指標,其是c語言的重點,c語言學的好壞,其實就是指標學的好壞。其實指標並不複雜,學習指標,要正確的理解指標。指標也是一種變數,占有記憶體空間,用來儲存記憶體位址 指標就是告訴編譯器,開闢4個位元組的儲存空間 32位系統 無論是幾級指標都是一樣的 p操作記憶體 在指標宣告時,號表示所宣告的變數為指...

深入理解C語言 深入理解指標

關於指標,其是c語言的重點,c語言學的好壞,其實就是指標學的好壞。其實指標並不複雜,學習指標,要正確的理解指標。指標也是一種變數,占有記憶體空間,用來儲存記憶體位址 指標就是告訴編譯器,開闢4個位元組的儲存空間 32位系統 無論是幾級指標都是一樣的 p操作記憶體 在指標宣告時,號表示所宣告的變數為指...