- •Так как исходный тип char знаковый, а число положительное, то расширяем представление нулем
- •Результат выполнения оператора
- •Результат выполнения оператора
- •Результат выполнения оператора
- •Результат выполнения оператора
- •Результат выполнения оператора
- •Результат выполнения оператора
- •Результат выполнения оператора
- •Результат выполнения оператора
- •Результат выполнения оператора
- •Результат выполнения оператора
- •Результат выполнения оператора
- •Результат выполнения оператора
- •Результат выполнения оператора
- •Результат выполнения оператора
- •Результат выполнения оператора
- •Результат выполнения оператора
- •Результат выполнения оператора
- •Результат выполнения оператора
- •Результат выполнения оператора
- •Результат выполнения оператора
- •Результат выполнения оператора
- •Результат выполнения оператора
- •Результат выполнения оператора
- •Результат выполнения оператора
- •Результат выполнения оператора
- •Результат выполнения оператора
- •Результат выполнения оператора
- •Результат выполнения оператора
- •Результат выполнения оператора
- •Результат выполнения оператора
- •Результат выполнения оператора
- •Результат выполнения оператора
- •Результат выполнения операции
- •Результат выполнения операции
- •Результат выполнения операции
- •Результат выполнения операции
- •Результат выполнения операции
- •Результат выполнения операции
- •Результат выполнения операции
- •Результат выполнения операции
- •Результат выполнения операции
- •Результат выполнения операции
- •Результат выполнения операции
- •Результат выполнения операции
- •Результат выполнения операции
- •Результат выполнения операции
- •Результат выполнения операции
- •Результат выполнения операции
- •Результат выполнения операции
- •Результат выполнения операции
- •Результат выполнения операции
- •Результат выполнения операции
- •Результат выполнения операции
- •Результат выполнения операции
- •Результат выполнения операции
- •Результат выполнения операции
- •Результат выполнения операции
- •Результат выполнения операции
- •Результат выполнения операции
- •Результат выполнения операции
- •Результат выполнения операции
- •Результат выполнения операции
- •Результат выполнения операции
- •Результат выполнения операции
11111-правильно без вариантов!!!!!!!!!!!!!!!!!!!
22222-фэил!!!!!!!!
33333-херня!
2&123=2
~11= -12
~78=-79
~-5=4
__________________________________________________________________________________________________________________________________________________________________________________________
В заданиях теста оператору printf ("%d\n", выражение); соответствует оператор cout << int (выражение) << endl; при спецификаторе %d и
cout << unsigned (выражение) << endl; при спецификаторе %u
printf ("%d\n", char(2&123)); cout << int (char (2&123)) << endl;
здесь: исходный тип – char; тип преобразования – int;
printf ("%u\n", char(2&123)); cout << unsigned(char (2&123)) << endl;
здесь: исходный тип – char; тип преобразования – unsigned;
Алгоритм преобразования типов:
выполняем указанную операцию и получаем логическое представление значения результата в количестве байтов, соответствующих заданному исходному типу;
расширяем представление числа до количества байт, определяемых типом преобразования; при этом:
если исходный тип числа знаковый (char, short, int,…), то представление числа расширяется знаковым битом (единицей или нулем);
если исходный тип числа беззнаковый (unsigned char, unsigned short, …), то представление числа всегда расширяется нулем;
дальнейшая интерпретация полученного логического представления значения результата зависит от типа преобразования:
для беззнакового – число вычисляем по его развернутой записи: 1*2i + …
для знакового типа:
если знаковый бит равен 0, то число положительное и получаем его значение по развернутой записи: 1*2i + …
если знаковый бит равен 1, то число отрицательное и получаем значение его модуля обычным образом (инверсия, затем +1, а затем приписываем знак - )
Пример 1:
cout << int (char (2&123)) << endl;
2&123= 2; логическое представление значения для исходного типа char: 000000102
так как исходный тип char знаковый, а число положительное, то расширяем представление нулем
для типа преобразования int имеем: 00000000 00000000 00000000 00000010
4. тип преобразования int – знаковый, знаковый бит содержит 0, значит число положительное и равно 2.
cout << unsigned(char (2&123)) << endl;
2&123= 2; логическое представление значения для исходного типа char: 000000102
Так как исходный тип char знаковый, а число положительное, то расширяем представление нулем
для типа преобразования unsigned имеем: 00000000 00000000 00000000 00000010
тип преобразования unsigned – беззнаковый, число равно 2
cout << int (unsigned char (2&123)) << endl;
2&123= 2; логическое представление значения для исходного типа unsigned char: 000000102
так как исходный тип unsigned char беззнаковый, то расширяем представление нулем
для типа преобразования int имеем: 00000000 00000000 00000000 00000010
тип преобразования int – знаковый, знаковый бит содержит 0, значит число положительное и равно 2.
Пример 2:
cout << int (char (~11)) << endl;
1. ~11= -12; логическое представление значения для исходного типа char: 111101002
2. так как исходный тип char знаковый, и число отрицательное, то расширяем представление единицей
3. для типа преобразования int имеем: 11111111 11111111 11111111 11110100
4. тип преобразования int – знаковый, знаковый бит содержит 1, значит число отрицательное и получим его модуль: 00000000 00000000 00000000 00001011 +1=00000000 00000000 00000000 00001100 2 = -12
cout << unsigned (char (~11)) << endl;
1. ~11= -12; логическое представление значения для исходного типа char: 111101002
2. так как исходный тип char знаковый, и число отрицательное, то расширяем представление единицей
3. для типа преобразования unsigned имеем: 11111111 11111111 11111111 11110100
4. тип преобразования unsigned – беззнаковый, значит число положительное и получим его значение по развернутой форме записи: 11111111 11111111 11111111 111101002 = 4294967284
cout << int (unsigned char (~11)) << endl;
1. ~11= -12; логическое представление значения для исходного типа unsigned char: 111101002
2. так как исходный тип unsigned char беззнаковый, то расширяем представление нулем
3. для типа преобразования int имеем: 00000000 000000000 00000000 11110100
4. тип преобразования int – знаковый, знаковый бит содержит 0, значит число положительное и получим его значение по развернутой форме записи: 00000000 00000000 00000000 11110100=244
Гр.1____________________________________________________________________________________________________________________________________________________________________________________
Результат выполнения оператора
printf ("%d", char(2&123)); 2
и его обоснование:
1. 2 2. -13 3. 4294967293
4. исходное представление значения выражения (для знакового типа) «расширяется» знаковым битом, который в данном представлении числа есть 0
5. исходное представление значения выражения (для знакового типа) «расширяется» знаковым битом, который в данном представлении числа есть 1 6. исходное представление значения выражения (для беззнакового типа) «расширяется» нулем, независимо от значения знакового бита в представлении 7. единицу в знаковом разряде итогового логического представления числа спецификатор d интерпретирует как «минус»
8. единицу в знаковом разряде итогового логического представления числа спецификатор u интерпретирует как его значение 9. исходное логическое представление выражения занимает 1 байт 10. исходное логическое представление выражения занимает 4 байта
11. итоговое логическое представление выражения занимает 1 байт 12. итоговое логическое представление выражения занимает 4 байта
13. 0 в знаковом разряде итогового логического представления числа спецификатор d интерпретирует как «плюс»
14. вычисляем значение числа
15. 3
16. -14