Я имею дело с некоторым 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 и т.д.)