Основные типы 1.1
PRINT(d,"5") | Формат %d указывает printf, что аргумент нужно напечатать как десятичное число. Аргумент "5" представляет собой ссылку на массив символов, т.е. адрес массива из двух символов '5' и '\0'. |
PRINT(d,'5') | %d требует напечатать десятичное значение символа '5'1. |
PRINT(d,5) | Целое число 5 печатается в десятичном виде. |
PRINT(s,"5") | Формат %s указывает printf, что аргумент является ссылкой на массив символов. Так как "5" - ссылка на массив символов, то печатается содержимое этого массива, т.е. число 5. |
PRINT(c,'5') | Формат %c указывает printf, что аргумент нужно рассматривать как значение некоторого символа (его код) и что этот символ нужно напечатать. Так как '5' как раз и есть значение символа, то напечатан будет символ 5. |
PRINT(c,53) | Десятичное число 53 - это код символа 5 в кодировке ASCII. |
PRINT(d,('5'>5) | Последней будет напечатана 1, так как '5' имеет большее значение (53), чем целое 5. |
1 Значение, которое используется здесь есть значение символа в кодировке ASCII (приложение 3). Кодировка ASCII - одна из возможных кодировок для представления символов там, где необходимо значение символа.
Основные типы 1.2
вначале ax=-8, ux=-8 | |
PRINT(o,sx) | %o указывает printf, что аргумент следует напечатать как восьмеричное число. |
PRINT(o,ux) | Значение -8 представляется как строка из 0 и 1, что верно как для переменных без знака, так и для переменных со знаком. |
PRINT(o,sx>>3) | С этой трудностью мы сталкивались уже и раньше. В некоторых версиях языка С сдвиг целого со знаком вправо приводит к тому, что знаковый разряд копируется в свободные старшие разряды слова, т.е. знак сохраняется. Однако, внимание, - это свойство зависит от транслятора! |
PRINT(o,ux>>3) | Когда происходит сдвиг целого без знака вправо, то освободившиеся старшие разряды всегда заполняются нулями. |
PRINT(d,sx>>3) | Сдвиг на 3 разряда вправо целого со знаком -8 дает ожидаемый результат -1 при условии, что знак сохраняется, и 8191 в противном случае (на 16-разрядной машине с дополнительным кодом). |
PRINT(o,ux>>3) | Для переменной типа unsigned со значением -8 результат всегда равен 8191 (на 16-разрядной машине). |