Chinaunix

标题: 请教对于字符的打印的问题 [打印本页]

作者: cunettenuc    时间: 2007-11-06 13:28
标题: 请教对于字符的打印的问题
对于下面这段代码:

  1. #include<stdio.h>

  2. int   main()
  3. {
  4.     unsigned   int   a   =   0xAABCDEF7;
  5.     unsigned   char   i   =   (unsigned   char)a;
  6.     char*   b   =   (char*)&a;
  7.     printf( "%08x,   %08x\n",  i,*b);
  8. }
复制代码

运行的结果如下:
000000f7,   fffffff7
为什么后面的*b打印出来的前面全为F呢? 望指教. 谢谢!
作者: web_surf    时间: 2007-11-06 14:00
原帖由 cunettenuc 于 2007-11-6 13:28 发表
对于下面这段代码:

#include

int   main()
{
    unsigned   int   a   =   0xAABCDEF7;
    unsigned   char   i   =   (unsigned   char)a;
    char*   b   =   (char*)&a;
    printf( "%08x,   ...



一般机器都是小端的,故b指向的内存分布为 F7 DE BC AA(低地址 -> 高地址)
而b的类型是char *, 所以*b是char类型的, 故*b = F7(指向地址的第一个byte的值)
而%x会打印4个byte,所以将需要将*b扩展成4type的int型,即将F7扩展成FFFFFFF7(F7最高为是1,故扩展成了带符号数)
作者: cugb_cat    时间: 2007-11-06 14:00
先截断,然后类型扩展
作者: cunettenuc    时间: 2007-11-06 17:17
哦.谢谢.我明白了,是signed 和unsigned 的问题. 如果将b设为unsigned 的话 打印出来的也和前面的一样了.




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2