c++ - 在C++中用<<声明一个int

标签 c++ initialization boolean implicit-conversion

有人可以向我解释该声明在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,其中 bool(boolean) 值隐式转换为true(真)和0(假)。因此,如果dx大于0,您将得到1。

如果dx小于0,则将获得-1

如果dx等于0,则两个子表达式的计算结果均为false,您将获得0

因此,根据dx是大于还是小于0,将变量ix初始化为1或0或-1。

在此声明中
int error(dy - (dx >> 1));

使用按位右移运算符dx >> 1将变量dx的位右移一个位置。它等效于表达式dx / 2

例如,如果dx等于6,则其二进制表示为(为简单起见,我仅使用一个字节)
0000 0110

向右移动一个位置,您将获得
0000 0011

那是3的二进制表示。

很难说为什么在此声明中使用此初始值设定项
int error(dy - (dx >> 1));

不知道使用它的上下文。

关于c++ - 在C++中用<<声明一个int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60234055/

相关文章:

java - 为什么我们不能使用构造函数本身来初始化 servlet?

Python:根据 boolean 条件消除 Pandas DataFrame 中的行

c++ - 警告 : Comparison between signed and unsigned integer expression

c++ - 如何在 C++ 中从文件中读取小端整数?

c++ - CRTP 层次类的非模板基类

c - 如何按照C编程语言标准初始化一个struct

c++ - 读取 BMP 文件 - 从 C/C++ 中获取数据

C:通过外部链接初始化全局常量

c++ - 为什么不仅仅将 boolean 值进行比较?

java - Java中的 boolean 值赋值