有趣的一件事情(1)中,俺得出了一个结论:Arm Android是无符号提升

事实真的是如此么?再看一段代码:

void testchar(){
    char ch;
    int i;

    for(i=0;i<256;i++){
        ch = i – 256;
        if(ch>=0)
            __android_log_print(ANDROID_LOG_DEBUG, "testchar", "ch>=0n");
        else
            __android_log_print(ANDROID_LOG_DEBUG, "testchar", "ch<0n");
    }
}

你猜运行这段代码,得到的结果是什么?

一共打印256行“08-04 06:40:06.912: DEBUG/testchar(931): ch>=0”

 

再看这段代码

void testshort(){
    short s = -1;
    int i = s;
    __android_log_print(ANDROID_LOG_DEBUG, "testshort", "i = %dn", i);
}

它的输出是“08-04 06:45:25.672: DEBUG/testshort(959): i = -1”

这说明,short提升至int,还是做的有符号提升,而char提升至int,却是无符号提升。

所以,更贴切的结论是 “char在ARM android下缺省是无符号的”

Advertisements