(int)(unsigned char)(x)在C中做什么?

Tu *_* Do 6 c

文件ctype.h,线20,__ismask被定义为:

#define __ismask(x) (_ctype[(int)(unsigned char)(x)])
Run Code Online (Sandbox Code Playgroud)

怎么(int)(unsigned char)(x)办?我猜它会转换x为unsigned char(只检测第一个字节而不管x),但是为什么它会被转换int为最后一个?

Pet*_*ter 11

(unsigned char)(x)有效地计算a unsigned char的值x % (UCHAR_MAX + 1).这具有给出正值(在0和之间UCHAR_MAX)的效果.大多数实现UCHAR_MAX都具有值255(尽管标准允许unsigned char支持更大的范围,但这种实现并不常见).

由于结果(unsigned char)(x)保证在a支持的范围内int,转换为int不会改变值.

净效应是最不重要的字节,具有正值.

当使用char(有符号或无符号)类型作为数组索引时,某些编译器会发出警告.转换为int关闭编译器.