大胖的部落格

Just a note

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  112 随笔 :: 0 文章 :: 3 评论 :: 0 Trackbacks

    long long int my64 = 0x0000000100000002;
    
int my32 = 0x00000003;

    printf(
"%d, %d\n",my64, my32);        //希望输出2,3; 实际输出2,1

    printf(
"%lld, %d\n",my64, my32);    //正确输出

如果将0x0000000100000002写入到以0x0000开始的内存中,则结果为
 内存地址          little-endian
0x0000                  0x02
0x0001                  0x00
0x0002                  0x00
0x0003                  0x00
0x0004                  0x01
0x0005                  0x00
0x0006                  0x00
0x0007                  0x00

上述代码中第一个printf取两个4字节整形输出,所以第一个8字节整形被当做两个4字节整形,由于是little-endian,低32位当做第一个4字节整形,高32位被当做第二个4字节整形。
64位整形需要用%lld来输出,如第二个printf。
posted on 2009-07-03 14:55 大胖 阅读(223) 评论(0)  编辑 收藏 引用 所属分类: Others

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理