Таинственный (для меня) printf. Почему печатает "не то" - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Всем привет! Есть отлично работающая программа, но я её хочу подправить, соответственно мне надо разобраться в некоторых моментах её работы. Что б разобраться я вывожу данные через КОМ-порт на терминал. Вот участок кода который никак не укладывается у меня в голове, хотя он примитивен
Листинг программы
  1. void getString(long int run)
  2. {
  3. unsigned int res = 123000;
  4. printf("res = %d\n", res);
  5. printf("run = %d\n", run);
  6. res = run;
  7. printf("res = run = %d\n", res);
  8. res = 65535 - res;
  9. printf("65535 - res = %d\n", res);
  10. decToChar(res);
  11. }
В терминале я получаю следующее:
res = -7616 run = -8072 res = run/32 = -8072 65535 - res = 8071
Хотя ожидал увидеть 123000 и так далее... Что я делаю не так в printf ? Спасибо! ХЕЛП прилагается: The following conversion type characters are supported: 'i' - the function argument is a signed decimal integer; 'd' - the function argument is a signed decimal integer; 'u' - the function argument is an unsigned decimal integer; 'e' - the function argument is a float, that will be outputted using the [-]d.dddddd e[±]dd format 'E' - the function argument is a float, that will be outputted using the [-]d.dddddd E[±]dd format 'f' - the function argument is a float, that will be outputted using the [-]ddd.dddddd format 'x' - the function argument is an unsigned hexadecimal integer, that will be outputted with lowercase characters; 'X' - the function argument is an unsigned hexadecimal integer, that will be outputted with with uppercase characters; 'c' - the function argument is a single character; 's' - the function argument is a pointer to a null terminated char string located in RAM; 'p' - the function argument is a pointer to a null terminated char string located in FLASH; '%' - the '%' character will be outputted.
И вдогонку. Если я использую: 'u' - the function argument is an unsigned decimal integer;
Листинг программы
  1. unsigned int res = 123456;
  2. printf("res = %u\n", res);
  3. printf("run = %u\n", run);
  4. res = run;
  5. printf("res = run/32 = %u\n", res);
  6. res = 65535 - res;
  7. printf("65535 - res = %u\n", res);
  8. decToChar(res);
То в терминале получаю:
res = 57920 run = 57464 res = run/32 = 57464 65535 - res = 8071
Почему ТАК?

Решение задачи: «Таинственный (для меня) printf. Почему печатает "не то"»

textual
Листинг программы
  1. #include <iostream>
  2. using namespace std;
  3. void getString(long int run)
  4. {
  5.     unsigned int res = 123000;
  6.     printf("res = %d\n", res);
  7.     printf("run = %d\n", run);
  8.     res = run;
  9.     printf("res = run = %d\n", res);
  10.     res = 65535 - res;
  11.     printf("65535 - res = %d\n", res);
  12.     //decToChar(res);
  13. }
  14.  
  15. void main()
  16. {
  17.     getString(100);
  18. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы