Я начинаю программист, читаю K & R, и мне кажется, что книга предполагает много предшествующих знаний. Один из аспектов, который меня смущает, - это фактическое представление, или я должен сказать, существование переменных в памяти. Что именно задает тип данных для переменной? Я не слишком уверен в том, как сформулировать этот вопрос... но я задам несколько вопросов, и, возможно, кто-то может придумать для меня последовательный ответ.
При использовании getchar() мне сказали, что лучше использовать тип "int", чем тип "char" из-за того, что "int" может содержать больше значений, в то время как "char" может содержать только 256 значений. Поскольку нам может понадобиться переменная для хранения значения EOF, нам потребуется больше 256 или значение EOF будет перекрываться с одним из 256 символов. На мой взгляд, я рассматриваю это как кучу ящиков с пустыми отверстиями. Может ли кто-нибудь дать мне лучшее представление? У этих "ящиков" есть индексные номера? Когда EOF перекрывается со значением в 256 доступных значениях, можем ли мы предсказать, какое значение оно будет перекрывать с?
Кроме того, означает ли это, что тип данных "char" используется только в том случае, когда мы просто назначаем значение переменной вручную, например char c = 'a', когда мы определенно знаем, что у нас будет только 256 возможных символов ASCII?
Кроме того, каково фактическое важное различие между "char" и "int"? Если мы можем использовать тип "int" вместо типа "char" , почему мы решаем использовать один за другим в определенные моменты? Является ли это для сохранения "памяти" (я использую кавычки, поскольку на самом деле я не использую "память" ).
Наконец, как точно получены 256 доступных значений типа char? Я читал что-то о модуле 2 ^ n, где n = 8, но почему это работает (что-то делать с бинарными?). Что такое модульная часть "modulo 2 ^ n" означает (если она имеет какое-либо отношение к модульной арифметике, я не вижу отношения...)?