今天在openwrt 上面遇到unsigned char 来定义变量, unsigned表示的是无符号,对于char类型来说 char 只有一个字节类型,这个字节中取最高位以充当符号位,剩余7位用来表示数值。而unsigned char 整个字节全部用来表示数值。所以,很显然一个字节的char类型表示数值范围是-128~127,unsigned char 表示的数值范围是0~255。
例子:
#include <stdio.h>
void f(unsigned char v)
{
char c = v;
unsigned char uc = v;
unsigned int a = c, b = uc;
int i = c, j = uc;
printf("----------------\n");
printf("%%c: %c, %c\n", c, uc);
printf("%%X: %X, %X\n", c, uc);
printf("%%u: %u, %u\n", a, b);
printf("%%d: %d, %d\n", i, j);
}
int main(int argc, char *argv[])
{
f(0x80);
f(0x7F);
return 0;
}