char 不等价于 8 字节的 int
#include "stdafx.h"
#include <stdio.h>
#define NUMBER (0x80) // 1000 0000
int _tmain(int argc, _TCHAR* argv[])
{
char c = NUMBER ;
if (c == NUMBER)
{
puts("c == NUMBER in 'if'") ;
}
else
{
puts("c != NUMBER in 'if'") ;
}//if
switch (c)
{
case NUMBER:
puts("c == NUMBER in 'switch'") ;
break ;
default :
puts("c != NUMBER in 'switch'") ;
break ;
}//switch
return 0;
}
vs 08 给出了一个 warning:
warning C4309: “初始化”: 截断常量值
可见, 在涉及符号问题的时候, int 虽然低 8 位二进制级与 char 有相同的值, 但却不相等. (即, !=)
消除上述警告, 只要将 char 改为 unsigned char 或者将 NUMBER 定义为 0x70 等最高位不为 1 的值(0 ~ 127) 即可.
上述不等问题也会随之消失.