Что этот код означает в C " int x = ~! Printf; "?
int x = ~!printf;
printf("%d\t%x",x,x);
Это дает: -1 FFFF
Кто-нибудь может объяснить?
1 ответ
printf
без аргументов указатель на функцию, который имеет ненулевое значение (он встроен, поэтому указатель не может быть нулевым)
Теперь вы применяете логическое отрицание (!
) на это ненулевое значение: вы получите ноль.
Теперь отрицаем этот ноль по битам (используя отрицание по битам) ~
), вы получаете все 1 в int
битовый диапазон (который может варьироваться в зависимости от компилятора)
Печать в десятичном выражении -1
и в шестнадцатеричном дает заданное число f
s, в зависимости от размера целого числа (на моем 32-битном целочисленном компиляторе я получаю ffffffff
)
(обратите внимание, что - особенно отрицание указателя функции - не может быть частью какой-либо действительной программы, это только для академических целей)