问题

软件和网站开发以及相关技术探讨
回复
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

问题

#1

帖子 BigSnake.NET » 2007-12-01 22:29

代码: 全选

#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 
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
dbzhang800
帖子: 3182
注册时间: 2006-03-10 15:10
来自: xi'an China
联系:

#2

帖子 dbzhang800 » 2007-12-01 23:22

这个结果是可以理解的,应该没问题。

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

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

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