请教一个在MDK环境下关于printf的奇怪问题

2019-07-21 02:49发布

现象

程序1

char abc = -123;
printf("magic number = %d ", -123);
printf("abc = %d ", abc);

打印结果:
magic number = -123
abc = 133

程序2

short abc = -123;
printf("magic number = %d ", -123);

printf("abc = %d ", abc);

打印结果:
magic number = -123
abc = -123

疑问

为什么printf打印char变量时,打印不了负值,会转为正值?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
STM32VBT6
1楼-- · 2019-07-21 02:59
 精彩回答 2  元偷偷看……
Theone
2楼-- · 2019-07-21 05:04
-123 
单字节是 1000 0101

输出%d应该是弄成int类型了

所以是 0000 0000 1000 0101

这样就是133了
Theone
3楼-- · 2019-07-21 08:42
 精彩回答 2  元偷偷看……
磨剑
4楼-- · 2019-07-21 11:30
回复【2楼】Theone:
---------------------------------
char a = -123;
int b = a;
b的值是a转换成int类型后的值,按照你的意思 b = 133 ?
磨剑
5楼-- · 2019-07-21 16:03
回复【2楼】Theone:
---------------------------------
你看程序2,abc是short,为什么它能正确打印?按照你说的char转换成int的做法,那short转换成int时,应该也是一样的,-123就变成133了
Theone
6楼-- · 2019-07-21 18:11
回复【6楼】STM32VBT6:
---------------------------------
你把abc定义成无符号的 怎么能出来负数?

一周热门 更多>