На языке C что означает" return ~0"?

Я имею дело с некоторым кодом C, который включает

return ~0;

что это значит? Это практически невозможно для google...

7 ответов


~ является побитовым не / дополнением, он же изменяет все 0 на 1 и наоборот. ~0-это значение со всеми битами, равными 1.


ключ к ответу на этот класс вопросов при проверке кода заключается в том, чтобы распознать достаточно структуры языка, чтобы знать, какой вопрос задать. Например,return оператор требует выражения типа, совместимого с объявленным типом возврата для самой функции.

зная, что ~0 должно быть выражение, это либо действительно забавный способ написать число, либо это оператор, который вы не узнаете, примененный к постоянному нулю. Последнее гипотеза легко проверяется, и поиск в гугле "оператора языка C" быстро приведет к десятки таблиц операторов. Почти ни один из которых скажу вам, что ~ оператор является побитовым, а не унарным оператором, который инвертирует каждый отдельный бит своего операнда. В этом конкретном случае преобразуется целое число со знаком 0 к целому числу, представленному со всеми его битами.

на большинстве платформ вы столкнетесь, что целое число имеет значение -1.


на ~ (tilde) оператор выполняет побитовое дополнение к его одному целочисленному операнду.

дополнение числа означает изменение всех 0 bits to 1 и 1s до 0s


в любом случае, для поисковых запросов со специальными символами, такими как ваш "return ~0;" вы можете использовать http://symbolhound.com/

Это довольно полезно для программиста.


здесь есть две независимые части: return и ~0.

return является оператором return. Читайте об этом в своей любимой книге с.

~0 - выражение, состоящее из побитового оператора дополнения ~ применяется к целочисленной константе 0. Все биты в нулевом значении типа int инвертируются (становятся 1) и результирующие int значение (со всеми битами, установленными на 1) - это то, что ~0 выражение. На двухкомпонентной машине a знаковое интегральное значение с таким битовым шаблоном (111...1) будет представлять -1.


не ноль или True.


Тильда делает побитовый комплимент числа 0, которое возвращает значение со всеми битами, установленными в 1, с любым размером возвращаемого значения (так что вы получите 0xFF для символа и т. д.)