分页: 1 / 1

问题

发表于 : 2007-12-01 22:29
BigSnake.NET

代码: 全选

#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 

发表于 : 2007-12-01 23:22
dbzhang800
这个结果是可以理解的,应该没问题。

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

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

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