簡體   English   中英

〜i真的等於i!= -1嗎?

[英]Is ~i really equivalent to i != -1?

如何~i的工作在C ++?

我只是注意到它等於i != -1 ,但是我不確定。

int arr[3] {1, 2, 3};
int n = 3;
for (int i = n - 1; ~i; i--) {
    cout << arr[i] << ' ';
}

它反向打印陣列。

~是按位NOT運算符。 當且僅當i所有位都為1時, ~i為0。 -1是否具有所有位1取決於系統上符號號的表示方式。 在二進制補碼表示中,-1用所有位1表示,因此在這樣的系統~(-1) == 0 不論是在補語上,還是在符號和幅度上,都不成立。

因此,答案是否定的。 並非在所有系統上。 就是說,在現代機器(自90年代以來的所有產品)中,二進制補碼是相當普遍的,在這樣的系統上,答案是肯定的。 但是,無論符號表示如何, i != -1都更具可讀性。

~i是按位NOT運算符。 即,它使i每一點都反轉。 -1表示二進制,因為數字的每一位都設置為1,將每一位都反轉為0會得到0。當在期望bool位置檢查整數時,將0視為false並將任何其他數字視為true

因此,在這種特殊情況下, ~i等於i != -1

因為for循環中的i變量是int類型的,其定義為有符號整數,並且因此以二進制補碼形式表示,因此其值-1的二進制表示形式是所有位均置1,這意味着所有位均為1。全1的否定全為0,這就是您所需要的,因為您要遞減i,所以循環執行直到i> = 0或i!=-1。 在這種情況下,對系統上符號值的按位運算具有整數的二進制補碼二進制表示形式,是的,它是相同的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM