Условие диапазона с использованием UINT32_MAX

Мне нужно проверить, находится ли int64_t в диапазоне -UINT32_MAX <= x <= UINT32_max

Я пробовал так:

if (x >= -(UINT32_MAX) && x <= UINT32_MAX)

Но кажется, что -(UINT32_MAX) переполняется до 1

Есть идеи?

Какой тип x?

Lev M. 18.12.2020 19:18

Используйте -(int64_t)UINT32_MAX

Eugene Sh. 18.12.2020 19:32
Почему в Python есть оператор &quot;pass&quot;?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
2
195
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Stdint.h определяет UINT32_MAX следующим образом:

#define UINT32_MAX (4294967295U)

Обратите внимание на U в конце. Это ограничивает UINT32_MAX целым числом без знака. Добавление минуса перед ним установит его в 1.

Следовательно, не рекомендуется использовать UINT32_MAX для проверки ограничений на int64_t.

Я отредактировал вопрос, проверяемая переменная - это int64_t, поэтому диапазон в порядке, мой плохой

M. Fournier 18.12.2020 19:31

Обновил ответ.

nvjsingh 18.12.2020 19:39
Ответ принят как подходящий

В -(UINT32_MAX) отрицание выполняется в типе uint32_t (скобки не действуют). Отрицание внутри типа uint32_t оборачивает по модулю 232, поэтому получается 1. Чтобы действительно отрицать UINT32_MAX, сделайте это в более широком типе, как в - (int64_t) UINT32_MAX.

Другие вопросы по теме