请问一下,我是新手,这个为什么输出这样啊???

nabice 2010-04-01 04:15:14

#include<stdio.h>
int main(){
char buf = '\xeb';
printf("%.2x\n",buf);
}


输出为
ffffffeb


谢谢~
...全文
217 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
nabice 2010-04-03
  • 打赏
  • 举报
回复
什么?
csucdl 2010-04-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 nabice 的回复:]
好吧。谢谢。。。不太明白。。。

但是我觉得你说的不太对。。。。因为我实验,它总是ffffffed。

如下。

#include<stdio.h>
int main(){
int i = 12342312;
int b = 32389123;
char buf[] = "\xeb\xeb\xeb\xeb";
int c = 1234123;
print……
[/Quote]

既然这样, 那你试试看在你的编译器下, sizeof(char)是多少
nabice 2010-04-02
  • 打赏
  • 举报
回复
好吧。谢谢。。。不太明白。。。

但是我觉得你说的不太对。。。。因为我实验,它总是ffffffed。

如下。

#include<stdio.h>
int main(){
int i = 12342312;
int b = 32389123;
char buf[] = "\xeb\xeb\xeb\xeb";
int c = 1234123;
printf("%.2x%.2x%.2x%.2x\n",buf[0],buf[1],buf[2],buf[3]);
getchar();
}
赵4老师 2010-04-02
  • 打赏
  • 举报
回复
%02x
luoyongbiao 2010-04-02
  • 打赏
  • 举报
回复
试了一下,同意14楼
nabice 2010-04-02
  • 打赏
  • 举报
回复
我觉得2是有作用的。。因为%.2x 如果值是A他会打印出0A

如果是%.4x,它会打印出000A
luoyongbiao 2010-04-02
  • 打赏
  • 举报
回复
同意6楼 “对于type是x的情况, %.2x 当中的2其实是没有作用的”的说法。

但是不同意“sprintf认为buf占用了4个字节的空间, 它算出来的值是ffffffeb, 至于为什么是这个值, 其实是没有逻辑在里面的, 因为在buf这个内存字节的高三个字节是什么值是无法预料的, 在你的程序中它恰巧是ffffffeb,”的说法,这个是因为要做符号扩展:二进制形式的最高位是1全部补1,是0全部补0
kevinyujm 2010-04-02
  • 打赏
  • 举报
回复

#include<stdio.h>

int main()
{
char buf = '\xeb';
printf("%x", (unsigned char)buf);
return 0;
}

kevinyujm 2010-04-02
  • 打赏
  • 举报
回复
楼主,6楼说的有道理!
你非要用%x printf char类型的,可以这样:

#include<stdio.h>

int main()
{
char buf = '\xeb';
printf("%x", (unsigned char)buf);
return 0;
}
zjhzstudent 2010-04-02
  • 打赏
  • 举报
回复
char buf = '\xeb';
溢出了
nabice 2010-04-02
  • 打赏
  • 举报
回复

#include<stdio.h>
int main(){
int i = 12342312;
int b = 32389123;
char buf[] = "\xeb\xeb\xeb\xeb";
int c = 1234123;
printf("%.2x%.2x%.2x%.2x\n",buf[0],buf[1],buf[2],buf[3]);
printf("%d\n",sizeof(char));
getchar();
}



ffffffebffffffebffffffebffffffeb
1


csucdl 2010-04-01
  • 打赏
  • 举报
回复
[Quote=引用楼主 nabice 的回复:]
C/C++ code

#include<stdio.h>
int main(){
char buf = '\xeb';
printf("%.2x\n",buf);
}



输出为

C/C++ code
ffffffeb


谢谢~
[/Quote]

分析如下:
对于printf函数的Format Specification, 组成如下:
%[flags] [width] [.precision] [{h | l | ll | I | I32 | I64}]type
对于type是x的情况, %.2x 当中的2其实是没有作用的。变量buf是char类型, 值是0xeb, 它占一个字节的内存空间, 但是由于你告诉printf函数 buf是一个Unsigned hexadecimal integer(%x), sprintf认为buf占用了4个字节的空间, 它算出来的值是ffffffeb, 至于为什么是这个值, 其实是没有逻辑在里面的, 因为在buf这个内存字节的高三个字节是什么值是无法预料的, 在你的程序中它恰巧是ffffffeb, 但是你稍微改动一些程序, 比如新增加一个变量, 这个值也许就不是ffffffeb了。
nabice 2010-04-01
  • 打赏
  • 举报
回复
"%.2x"这个玩意儿不是限制输出2位吗?怎么没起作用啊?
lovesi3344 2010-04-01
  • 打赏
  • 举报
回复
ffffffeb
1111 1111 1111 1111 1111 1111
1111 1111 1111 1111 1111 1110
0000 0000 0000 0000 0000 0001
nabice 2010-04-01
  • 打赏
  • 举报
回复
为什么?~~~~~~~~~~~~~~~~~~~~~~~~~~~~~多出那么多的ffffff
kevinyujm 2010-04-01
  • 打赏
  • 举报
回复
类型不一致哦
nabice 2010-04-01
  • 打赏
  • 举报
回复
改成unsigned char 就正常了。

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧