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) 即可.

  上述不等问题也会随之消失. 

 

posted @ 2011-09-21 19:57  walfud  阅读(614)  评论(0编辑  收藏  举报