Что этот код означает в C " int x = ~! Printf; "?

int x = ~!printf;
printf("%d\t%x",x,x);

Это дает: -1 FFFF

Кто-нибудь может объяснить?

1 ответ

printf без аргументов указатель на функцию, который имеет ненулевое значение (он встроен, поэтому указатель не может быть нулевым)

Теперь вы применяете логическое отрицание (!) на это ненулевое значение: вы получите ноль.

Теперь отрицаем этот ноль по битам (используя отрицание по битам) ~), вы получаете все 1 в int битовый диапазон (который может варьироваться в зависимости от компилятора)

Печать в десятичном выражении -1 и в шестнадцатеричном дает заданное число f s, в зависимости от размера целого числа (на моем 32-битном целочисленном компиляторе я получаю ffffffff)

(обратите внимание, что - особенно отрицание указателя функции - не может быть частью какой-либо действительной программы, это только для академических целей)

Другие вопросы по тегам