При написании файлов C в VS Code я сначала назвал файл.c.cpp. После завершения программы у меня возникли ошибки во время выполнения. После 30 минут устранения неполадок я обнаружил, что проблема кроется в имени файла:
Расширение .c привело к тому, что IDE ошибочно определила его как программу на языке C, в результате чего VS Code использовал gcc (компилятор C) вместо g (компилятор C) для компиляции моего кода.
Подпись: Какой дурак!
Философия дизайна Java существенно отличается от традиционных компилируемых языков:
Эта конструкция достигает цели «Напишите один раз, запустите где угодно», тогда как исполняемые файлы C (файлы .exe) ограничены возможностью запуска на одной платформе.
Преимущества: Одна и та же программа может работать на разных компьютерах без изменений
Недостатки: Дополнительный шаг в процессе может немного замедлить компиляцию по сравнению с традиционными методами
Напиши один раз, беги куда угодно
---------James Gosling
Little Endian: младший байт хранится по наименьшему адресу. Этот метод хранения появился для облегчения чтения памяти ЦП, которое происходит от младшего к старшему адресу. Интересно, что это противоположно тому, как люди обычно пишут цифры.
Например:
Двоичное представление числа 329933: 00000000 00000101 00001000 11001101
Хранилище с прямым порядком байтов: 11001101 00001000 00000101 00000000
Как мы видим, Little Endian меняет порядок байтов в двоичном представлении. Однако очень важно отметить, что порядок битов внутри каждого байта остается неизменным!
Мой любимый эксперимент по приведению типов!
# includeint main() { int a; int *p; a=329933; p=&a; char *q; q=(char*)p; printf("%d\n",*p); printf("%d\n",*q); }
Выход:
329933 -51
Мне любопытно, почему он выводит -51?
Это совпадение? Давайте попробуем еще два примера
printf("%d\n",*(q 1)); printf("%d\n",*(q 2));
Попробуйте:
При принудительном приведении типов (char)p будет указывать на адрес первого байта четырехбайтового целого числа, который равен 11001101.
Крайняя левая цифра 1 представляет отрицательный знак, указывая, что это отрицательное число. После применения дополнения до двух мы получаем: 0110011 (последние 7 бит)
(Примечание: для положительных чисел дополнение до двух — это просто двоичное представление десятичного числа. Для отрицательных чисел дополнение до двух получается путем инвертирования всех битов, кроме самого левого (старшего) бита, с последующим добавлением 1. в самый правый бит.)
Преобразование этого числа в десятичное число дает -51. Интересно, правда?
Многие задаются вопросом, почему сейчас -128. Если вы знаете ответ, поделитесь им в комментариях. Это не только поможет другим, но и поможет вам организовать свои мысли.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3