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