[英]Declaring an int in C++ with <<
有人可以向我解釋這個聲明在 C++ 中的含義嗎? 我從未見過這樣聲明的東西,只是對它的含義和工作方式感到困惑:
int ix((dx > 0) - (dx < 0));
與此聲明相同:
int error(dy - (dx >> 1));
您可以使用括號或大括號中的初始化程序聲明一個標量對象。
在本聲明中
int ix((dx > 0) - (dx < 0));
使用表達式(dx > 0) - (dx < 0)
作為初始值設定項。
如果dx
大於 0,則子表達式(dx > 0)
計算結果為 boolean true ,而此子表達式(dx < 0)
為 boolean false
。 因此,表達式為true - false
,其中布爾值隱式轉換為 1 表示真,隱式轉換為 0 表示假。 因此,如果dx
大於0
您將獲得 1 。
如果dx
小於0
你會得到-1
。
如果dx
等於0
則兩個子表達式的計算結果均為 false ,您將得到0
。
因此變量 ix 被初始化為 1 或 0 或 -1,這取決於dx
是大於等於還是小於 0。
在本聲明中
int error(dy - (dx >> 1));
使用按位右移運算符dx >> 1
將變量dx
位右移一位。 它等價於表達式dx / 2
。
例如,如果dx
等於 6,則其二進制表示為(為簡單起見,我將僅使用一個字節)
0000 0110
右移一個位置你會得到
0000 0011
那是 3 的二進制表示。
很難說為什么在這個聲明中使用這個初始化器
int error(dy - (dx >> 1));
在不知道使用它的上下文的情況下。
默認情況下,當您編寫類似int var;
和int var = int();
在 C++ 中, var
的值將在第一種情況下未初始化,並在第二種情況下設置為零。
您的示例中的行與以下內容相同:
int ix = (dx > 0) - (dx < 0);
int error = dy - (dx >> 1);
此外, dx > 0
和dx < 0
是 0 或 1, dx >> 1
將dx
除以 2。
在這一行中: int ix((dx > 0) - (dx < 0));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.