int main() { unsigned int b; signed int a; char z=-1; b=z; a=z; printf("%d %d",a,b); }
дает -1 -1. почему не происходит расширение знака, ТАКЖЕ, когда это происходит?
Расширение знака DID происходит, но вы печатаете результаты неправильно.В вашем printf вы указали %d для b, но b не подписано, вы должны были использовать %u для печати b.
%d
b
%u
printf не знает тип своих аргументов и использует заданный формат для их интерпретации.
printf("%d %u",a,b);
Потому что printf смотрит на необработанную память, а не на тип.используйте %u для печати значения без знака.
printf
См.
http://ideone.com/Qpcbg