char 、signed char、unsigned char

看如下代码:

char c = -1;

signed char sc = -1;

unsigned char uc = -1;

printf("c=%d, sc=%d, uc=%d, cx=%x, scx=%x, ucx=%x , c, sc, uc, c, sc, uc);

Windows平台下输出:

c=-1,sc=-1,uc=255,cx=ffffffff,scx=ffffffff,ucx=ff

char相当于signed char

IMX6UL平台下输出:

c=255,sc=-1,uc=255,cx=ff,scx=ffffffff,ucx=ff

char相当于unsigned char

注解:

(1)编译器为字面值-1分配空间,存储的就是-1的补码ff,它不管程序用什么类型引用它,它被解析为什么数值完全取决于引用它的c/sc/uc的数据类型。

(2)由于在IMX6UL下char相当于unsigned char,因此切忌拿char当作负数使用,例如函数返回类型定义为char类型,返回-1,因为该-1会被调用者解析为unsigned char 也即255

原文地址:https://www.cnblogs.com/any91/p/6651599.html