Что означает «возврат ~ 0» на языке Си? - PullRequest
11 голосов
/ 14 сентября 2010

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

return ~0;

Что это значит?Гуглить практически невозможно ...

Ответы [ 7 ]

20 голосов
/ 14 сентября 2010

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

6 голосов
/ 14 сентября 2010

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

Зная, что ~0 должно быть выражением, это либо действительно забавный способ написать число, либо оператор, который вы не узнаете, примененный к константе ноль. Эта последняя гипотеза легко проверяется, и поиск в Google для «оператора языка Си» быстро приведет к десяткам таблиц операторов . Почти любой из из которых скажет вам, что оператор ~ является битно-не унарным оператором, который инвертирует каждый отдельный бит своего операнда. В данном конкретном случае это преобразует целое число со знаком 0 в целое число, представленное со всеми установленными битами.

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

4 голосов
/ 14 сентября 2010

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

Дополнение числа означает изменение всех 0 битов на 1 и всех 1 с на 0 с

3 голосов
/ 11 июля 2012

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

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

2 голосов
/ 14 сентября 2010

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

return является оператором возврата.Прочтите об этом в вашей любимой книге C.

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

0 голосов
/ 14 сентября 2010

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

0 голосов
/ 14 сентября 2010

Не ноль или Истина.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...