繁体   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