Я имею дело с каким-то кодом C, который включает в себяВ языке C, что означает «return-0»?
return ~0;
Что это значит? Это почти невозможно для Google для ...
Я имею дело с каким-то кодом C, который включает в себяВ языке C, что означает «return-0»?
return ~0;
Что это значит? Это почти невозможно для Google для ...
~ - побитовое не/дополнение, иначе оно меняет все 0 на 1 и наоборот. ~ 0 - это значение со всеми битами, установленными в 1.
Не равен нулю или True.
Это может быть не очень хорошая практика кодирования человеком, который написал «return ~ 0», но этот ответ обеспечивает разумную вероятность 50/50 релевантности. Хорошо, что вы пытаетесь что-то объяснить, а не просто для ограниченного механического ответа. Я бы просто квалифицировался, если бы сказал: «Посмотрите, как код вызова использует возвращаемое значение ... если он всегда рассматривает его как логическое, тогда программист должен использовать его как обозначение, конвертируемое в истину». –
Поддельное обозначение истины; C имеет отдельные поразрядные и логические операторы по какой-либо причине. '! 0' может иметь смысл, но' ~ 0' является бессмыслицей (и, как говорили другие, определяется реализацией, поэтому его никогда не следует использовать, кроме аппаратно-ориентированного кода бит-twiddling). –
Конечно, но это только логическая причина для этого, почему кто-то должен вернуть это по любой другой причине? Истина в большинстве случаев определяется как -1 или! 0, когда возвращаемое значение является int. –
Оператор ~
(тильда) выполняет поразрядное дополнение в своем единственном целочисленном операнде.
Дополнение числа означает изменить все 0
бит 1
и все 1
с до 0
сек
'~' - побитовое НЕ, как указал @ user446034 в своем ответе. Их дополнением является схема представления чисел в двоичном формате, использующая этот оператор. –
тильды делает побитовое комплимент числа 0, который возвращает назад значение со всеми битами, установленных на 1 , с любым размером возвращаемого значения (так что вы получите 0xFF для символа и т. д.)
Это C. Если вы применяете '~ x', где' x' имеет тип 'char', вы получите то же, что и' ~ (int) x' из-за рекламных акций по умолчанию **, а не ** '0xff'. –
@R .. Это тоже пришло в голову, и теперь я застрял с надписью –
Здесь есть две независимые части: return
и ~0
.
return
- заявление о возврате. Читайте об этом в своей любимой книге C.
~0
- выражение, состоящее из оператора побитового дополнения ~
, применяемого к целочисленной константе 0
. Все биты в нулевом значении типа int
инвертируются (становятся 1), а итоговое значение int
(со всеми битами, установленными в 1) - это то, что оценивает выражение ~0
. На двухкомпонентной машине подписанное целочисленное значение с таким битовым рисунком (111...1
) будет представлять -1
.
, так почему бы просто не вернуть -1? – osager
@osager: «На двухкомпонентной машине есть подписанное целочисленное значение». Некоторые программисты в некоторых ситуациях хотели бы убедиться, что их код работает в прецедентах. –
Ключ к ответе на этот класс вопросов при проверке кода заключается в том, чтобы распознать структуру языка, чтобы узнать, какой вопрос задавать. Например, оператор return
требует выражения типа, совместимого с объявленным типом возвращаемого значения для самой функции.
Зная, что ~0
должно быть выражением, это либо очень забавный способ записать число, либо это оператор, который вы не распознаете, применяемый к постоянному нулю. Эта последняя гипотеза легко проверяется, и поиск в Google для оператора языка C быстро приведет к dozens of tables of operators. Почти any one из которых скажет вам, что оператор ~
является поразрядным, а не унарным оператором, который инвертирует каждый отдельный бит его операнда. В этом конкретном случае, который преобразует целое число со знаком 0
в целое число, представленное со всеми его битами.
На большинстве платформ вы столкнетесь с тем, что целое число имеет значение -1.
В любом случае, для поисковых запросов со специальными символами, такими как ваш «return ~ 0;» вы можете использовать http://symbolhound.com/
Это очень полезно для программиста.
Отлично! Неумение Google делать какие-либо знаки пунктуации было для меня довольно болезненным в прошлом. Благодаря :) – Mala
Google для операторов «c», и вы его найдете. –
кто-то умный. Это то же самое, что и -1. –
В таких случаях вам нужно подумать об альтернативных запросах, таких как «Операторы С» или «Оператор Cildid» –