当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 2 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 问题
帖子发表于 : 2007-12-01 22:29 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
代码:
#include <stdio.h>
#include <string.h>

int main(){
    char buf[16]  = { 0x96,0x8b,0xea,0xde,0x52,0xc7,0x18,0x82,0x1a,0x23,0x2e,0x07,0x24,0x80,0xe3,0x47 };
    int i;
    for (i = 0; i < 16; ++i)
        printf ("%02x ", buf[i] & 0xFF);
    printf("\n\n");
    for (i = 0; i < 16; ++i)
        printf ("%02x ", buf[i]);
    printf("\n");
}


代码:
$ ./a.out
96 8b ea de 52 c7 18 82 1a 23 2e 07 24 80 e3 47

ffffff96 ffffff8b ffffffea ffffffde 52 ffffffc7 18 ffffff82 1a 23 2e 07 24 ffffff80 ffffffe3 47


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2007-12-01 23:22 

注册: 2006-03-10 15:10
帖子: 3182
地址: xi'an China
送出感谢: 0 次
接收感谢: 2
这个结果是可以理解的,应该没问题。

1.从结果可以看出,这个编译器的 char 是有符号的类型, 如果你显式 指定 unsigned char 就没这个效果了

2.有符号的char作为参数被传递时,会自动提升为 int
相应的,无符号char 会自动提升为 unsigned int

3. int在计算机中是采用补码表示的是, 所以 char 为负时,前面都是补1,
所以你看到那么多f


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 2 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译