[英]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.