搜索

...c = -1; printf("%x\n",c);为什么是ffffffff而不是ff?

发布网友 发布时间:2024-10-25 16:44

我来回答

5个回答

热心网友 时间:2024-10-25 18:02

好吧,哥哥,您的追问精神让我感动了,小弟斗胆献上一计,请君笑纳:

 

(1)就用VC++6.0建立一个C++工程吧,写上如下代码:

(2)然后按下键盘上的F10,进行单步调试运行,右键单击代码区,在弹出的菜单中选择“Go To Disassembly” 进入汇编代码模式:

(3)可以看到c的真实内存值哦~!

 

 

小弟献丑了~! ^ ^

热心网友 时间:2024-10-25 18:00

%x是显示补码的,-1补码32个1,就是ffffffff,要想显示ff应该是255

热心网友 时间:2024-10-25 18:02

printf("%x\n",c); -- 转为long int 16进制输出。

ff 输出:
#include <stdio.h>
int main(){
char c = -1;
printf("%x\n",(unsigned char) c); //ff 输出
printf("%x\n",0xff & c); //ff 输出
return 0;
}

热心网友 时间:2024-10-25 18:04

因为%x是用来输出一个int类型的数据的。在你调用printf传递变量c的值的时候,系统会自动把c的值-1扩展成int类型的值-1,这也是C语言中的一个规定.

热心网友 时间:2024-10-25 18:01

printf();函数只识别第一个参数,即格式字符串,对于后一个参数,如你不指定,则当作32位的int来处理.
此时进行符号扩展,变成32位,如上所得.
printf("%x\n", (unsigned char)ch);同样是上面的原因.把他当作signed char定义,可是输出时转化为unsigned
  故输出8位.(-1的机内补码表示为全1,即ffffffffH)
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
Top