簡體   English   中英

在 C++ 中用 < 聲明一個 int

[英]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 > 0dx < 0是 0 或 1, dx >> 1dx除以 2。

在這一行中: int ix((dx > 0) - (dx < 0));

  • ix = 1 如果 dx > 0
  • ix = 0 如果 dx = 0
  • ix = -1 如果 dx < 0

暫無
暫無

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

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