Я начинаю программист, читаю 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» означает (если она имеет какое-либо отношение к модульной арифметике, я не вижу отношения ...)?
«Когда мы точно знаем, что у нас будет только 256 возможных символов ASCII?» nit-pick: в ASCII всего 128 символов. – kusma
есть больше, чем просто «int» .. есть unsigned int (0-65535) и подписанный int (-32767 по 32767) ... простой символ в большинстве реализаций от 0 до 255 в unsigned. У вас также есть короткие и длинные. short - два байта, int - 4 байта, а long - 8 байтов. См. Здесь: http://home.att.net/~jackklein/c/inttypes.html – 2010-01-09 17:29:51
Извините: s Тогда я могу спросить, почему мы не можем использовать 256 доступных значений типа «char», если мы также используем функцию getchar() и ожидая EOF в какой-то момент? – withchemicals