Я имею дело с некоторым C-кодом, который включает
return ~0;
Что это значит? Это очень невозможно для google для...
Я имею дело с некоторым C-кодом, который включает
return ~0;
Что это значит? Это очень невозможно для google для...
~ является побитовым не/дополнением, иначе он меняет все 0 на 1 и наоборот. ~ 0 - это значение со всеми битами, установленными в 1.
Ключ к ответу на этот класс вопросов при проверке кода заключается в том, чтобы распознать структуру языка, чтобы узнать, какой вопрос задавать. Например, инструкция return требует выражения типа, совместимого с объявленным типом возвращаемого значения для самой функции.
Зная, что ~0 должно быть выражением, это либо очень забавный способ записать число, либо это оператор, который вы не распознаете, применяемый к постоянному нулю. Эта последняя гипотеза легко проверяется, а поиск в googling для "оператора языка C" быстро приведет к десяткам таблиц операторов. Почти любой из них сообщит вам, что оператор ~ является поразрядным, а не унарным оператором, который инвертирует каждый отдельный бит его операнда. В этом конкретном случае, который преобразует целое число со знаком 0 в целое число, представленное со всеми его битами.
На большинстве платформ вы столкнетесь, что целое число имеет значение -1.
Оператор ~ (тильда) выполняет побитовое дополнение в своем единственном целочисленном операнде.
Дополнение номера означает изменение всех битов 0 до 1 и всех 1 до 0 s
Во всяком случае, для поисковых запросов со специальными символами, такими как ваш "return ~ 0;" вы можете использовать http://symbolhound.com/
Это очень полезно для программиста.
Здесь есть две независимые части: return и ~0.
return - оператор возврата. Читайте об этом в своей любимой книге C.
~0 - выражение, состоящее из оператора побитового дополнения ~, применяемого к целочисленной константе 0. Все биты в нулевом значении типа int инвертируются (становятся 1), а результирующее значение int (со всеми битами, установленными в 1) - это то, что оценивает выражение ~0. На двухкомпонентной машине подписанное целочисленное значение с таким битовым рисунком (111...1) будет представлять -1.
Не равен нулю или True.
Тильда выполняет побитный комплимент числа 0, возвращающее значение со всеми битами, установленными в 1, с любым размером возвращаемого значения (так что вы получите 0xFF для char и т.д.)