Понимание расширения знака - PullRequest
3 голосов
/ 20 августа 2011
int main()
{
  unsigned int b;
  signed int a;
  char z=-1;
  b=z;
  a=z;
  printf("%d %d",a,b);
}

дает -1 -1. почему не происходит расширение знака, ТАКЖЕ, когда это происходит?

Ответы [ 2 ]

10 голосов
/ 20 августа 2011

Расширение знака DID происходит, но вы печатаете результаты неправильно.В вашем printf вы указали %d для b, но b не подписано, вы должны были использовать %u для печати b.

printf не знает тип своих аргументов и использует заданный формат для их интерпретации.

printf("%d %u",a,b);
3 голосов
/ 20 августа 2011

Потому что printf смотрит на необработанную память, а не на тип.используйте %u для печати значения без знака.

См.

http://ideone.com/Qpcbg

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...