2010-09-14 2 views
11

Я имею дело с каким-то кодом C, который включает в себяВ языке C, что означает «return-0»?

return ~0; 

Что это значит? Это почти невозможно для Google для ...

+0

Google для операторов «c», и вы его найдете. –

+3

кто-то умный. Это то же самое, что и -1. –

+1

В таких случаях вам нужно подумать об альтернативных запросах, таких как «Операторы С» или «Оператор Cildid» –

ответ

19

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

0

Не равен нулю или True.

+1

Это может быть не очень хорошая практика кодирования человеком, который написал «return ~ 0», но этот ответ обеспечивает разумную вероятность 50/50 релевантности. Хорошо, что вы пытаетесь что-то объяснить, а не просто для ограниченного механического ответа. Я бы просто квалифицировался, если бы сказал: «Посмотрите, как код вызова использует возвращаемое значение ... если он всегда рассматривает его как логическое, тогда программист должен использовать его как обозначение, конвертируемое в истину». –

+0

Поддельное обозначение истины; C имеет отдельные поразрядные и логические операторы по какой-либо причине. '! 0' может иметь смысл, но' ~ 0' является бессмыслицей (и, как говорили другие, определяется реализацией, поэтому его никогда не следует использовать, кроме аппаратно-ориентированного кода бит-twiddling). –

+0

Конечно, но это только логическая причина для этого, почему кто-то должен вернуть это по любой другой причине? Истина в большинстве случаев определяется как -1 или! 0, когда возвращаемое значение является int. –

4

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

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

+0

'~' - побитовое НЕ, как указал @ user446034 в своем ответе. Их дополнением является схема представления чисел в двоичном формате, использующая этот оператор. –

0

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

+0

Это C. Если вы применяете '~ x', где' x' имеет тип 'char', вы получите то же, что и' ~ (int) x' из-за рекламных акций по умолчанию **, а не ** '0xff'. –

+0

@R .. Это тоже пришло в голову, и теперь я застрял с надписью –

2

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

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

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

+1

, так почему бы просто не вернуть -1? – osager

+1

@osager: «На двухкомпонентной машине есть подписанное целочисленное значение». Некоторые программисты в некоторых ситуациях хотели бы убедиться, что их код работает в прецедентах. –

6

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

Зная, что ~0 должно быть выражением, это либо очень забавный способ записать число, либо это оператор, который вы не распознаете, применяемый к постоянному нулю. Эта последняя гипотеза легко проверяется, и поиск в Google для оператора языка C быстро приведет к dozens of tables of operators. Почти any one из которых скажет вам, что оператор ~ является поразрядным, а не унарным оператором, который инвертирует каждый отдельный бит его операнда. В этом конкретном случае, который преобразует целое число со знаком 0 в целое число, представленное со всеми его битами.

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

3

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

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

+1

Отлично! Неумение Google делать какие-либо знаки пунктуации было для меня довольно болезненным в прошлом. Благодаря :) – Mala

Смежные вопросы