Как проверить, является ли int четным

Вероятно, это простое решение, которое просто ускользает от меня. В частности, я динамически создаю местоположения на холсте, используя функцию sin() для равноудаленных точек на окружности. Как только эти точки созданы, я анимирую фигуру, перемещающуюся от одной точки к другой, вычисляя наклон между точками и перерисовывая фигуру на каждом шаге наклона.

Проблема в том, что в зависимости от значений координат шаг наклона может составлять всего один шаг от точки a до точки b. Мне нужно, чтобы фигура двигалась по пути, а не просто прыгала от точки к точке.

Что я хочу сделать, так это заставить координаты местоположения (x, y) быть четными числами, что позволяет всегда уменьшать значения уклона. Итак, простая часть вопроса...

Как проверить, является ли значение int четным? Если это не так, я просто добавлю 1 к значению координаты.


person Daniel Whitlock    schedule 06.09.2013    source источник
comment
Непонятно, почему нельзя было переместить фигуру по пути, переместив ее всего на одну единицу. Как правило, вам следует избегать игр или трюков с координатами, чтобы ввести значения в вашу математику. Математика должна работать естественно. Однако вы не предоставили достаточно подробностей, чтобы оценить это.   -  person Eric Postpischil    schedule 06.09.2013
comment
Я анимирую движения пакетов в смоделированной сети на Java. Узлы представлены в виде PointShapes of Location(int x, int y). Пакеты представлены в виде RectangleShapes, начиная с исходного узла и перемещаясь по сетевому каналу к месту назначения. Мне нужно отображать движение, а не просто исчезать из одного узла и появляться в другом узле. Очевидно, я новичок в этом, и это моя первая попытка написать программу вне класса. Прошу прощения за возможную неконкретность моих вопросов.   -  person Daniel Whitlock    schedule 06.09.2013


Ответы (5)


Чтобы увидеть, является ли целое число четным:

  1. Проверьте, соответствует ли его значение 0 по модулю 2. Это value MOD 2 == 0. В языках стиля C это обычно выражается как value % 2 == 0.
  2. В качестве альтернативы проверьте значение бита 0. Это value BITWISE-AND 0x01 == 0. В языках стиля C это обычно выражается как (value & 0x01) == 0.

Если вам все равно, в каком направлении вы округляете, вы можете выровнять целое число за одну операцию, взяв его значение побитово и маску 0xFFFE (конечно, дополняя ширину вашего целого числа), что заставит установить 0 бит в ноль. Это value := value BITWISE-AND 0xFFFE, или в языках C-стиля value &= 0xFFFE.

person lc.    schedule 06.09.2013
comment
Спасибо за отзыв. - person Daniel Whitlock; 06.09.2013

Сделай на него мод 2. Если остаток равен 0, это четное число.

VB:

Тусклый четный = (3 mod 2 = 0)

person ps2goat    schedule 06.09.2013

Трудно дать вам конкретику, так как вы не дали много, но вам следует изучить операцию по модулю.

person User1578    schedule 06.09.2013
comment
Да, прошу прощения, совсем новичок на этом форуме. Я пытаюсь освоиться. Спасибо за предложение. - person Daniel Whitlock; 06.09.2013

Для целых чисел, хотя использование по модулю даст вам правильный ответ, оно требует деления. Деление не так быстро, как побитовые операции. Для того, что вам нужно, достаточно побитового И.

if(x & 0x1)
{
   sdt::cout << "x is odd" << std::endl;
}
else
{
   std::cout << "x is even" << std::endl;
}

Суть в том, что все положительные степени двойки четны. Поэтому единственный способ, которым двоичное представление целого числа может быть нечетным, — это установить первый бит.

person Stephen    schedule 06.09.2013

person    schedule
comment
Итак... int isEven = xcoord % 2; if(isEven == 0) будет означать, что xcoord является четным числом? - person Daniel Whitlock; 06.09.2013
comment
или проще если(xcoord%2 == 0) - person Daniel Whitlock; 06.09.2013
comment
@DanielWhitlock: Пожалуйста, никогда не устанавливайте isEven = xcoord % 2. Это приводит к тому, что нечто, называемое isEven, становится «ложным», если значение четное. Название должно соответствовать смыслу. Вы можете использовать remainder = xcoord % 2 или isOdd = xcoord % 2. - person Eric Postpischil; 06.09.2013
comment
Итак, просто установите значение остатка по модулю 2, а затем проверьте значение остатка на 0, верно? - person Daniel Whitlock; 06.09.2013