Объявление int в C ++ с помощью < - PullRequest
1 голос
/ 15 февраля 2020

Может кто-нибудь объяснить мне, что означает это объявление в C ++; Я никогда не видел, чтобы что-то объявлялось таким образом, и я просто не понимал, что это значит и как это работает:

int ix((dx > 0) - (dx < 0));

То же самое и с этим объявлением:

int error(dy - (dx >> 1));

Ответы [ 2 ]

4 голосов
/ 15 февраля 2020

Вы можете объявить скалярный объект, используя инициализатор в скобках или скобках.

В этом объявлении

int ix((dx > 0) - (dx < 0));

в качестве инициализатора используется выражение (dx > 0) - (dx < 0).

если dx больше 0, тогда подвыражение (dx > 0) оценивается как логическое значение true, тогда как это подвыражение (dx < 0) - как логическое значение false. В результате выражение равно true - false, где логические значения неявно преобразуются в 1 для истины и в 0 для ложных. Таким образом, вы получите 1, если dx больше 0.

Если dx меньше 0, вы получите -1.

Если dx равно 0, оба подвыражения оцениваются как ложные, и вы получите 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));

, не зная контекста, где он используется.

2 голосов
/ 15 февраля 2020

По умолчанию, когда вы пишете что-то вроде 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));

  • ix = 1, если dx> 0
  • ix = 0, если dx = 0
  • ix = -1, если dx <0 </li>
...