您可以为unsigned char分配什么值?

假设函数需要返回位模式00100010。

我想从右边的第5位返回这个模式。

这有效吗?

该function采用代表00100010的参数settings

 unsigned char mask = 20; return mask | settings; 

或者是否无法将值20分配给unsigned char

您可以为unsigned char分配什么值?

最小值为0,因为unsigned char是一些无符号整数类型。

最大的值是UCHAR_MAX

UCHAR_MAX至少为255,有些功率为2 – 1,如UCHAR_MAX等。通常为255。

如果将超出此范围的整数值分配给unsigned char ,则通过在范围内添加/减去UCHAR_MAX + 1来减小该值。


以下代码没问题,但不清楚20是否是需要的掩码或hex0x20。

 unsigned char mask = 20; // bits 0001 0100 // or unsigned char mask = 0x20;// bits 0010 0000 

注意,二进制模式0010_0010 2是34 10或22 16

我发现rsp的答案有点令人困惑。 所以让我清楚这一点。

'a'这样'a'字符只是根据字符表对整数的解释。 例如,根据ascii表'a' == 97此语句为true。

所以你可以自由地将一个整数写入(un)signed char 。 它基本上是一样的。

如果使用printf("%c\n",var)则将int参数转换为unsigned char ,并写入生成的字符,如果执行var = 'a'var = 97无关紧要

编辑:使用标准thx到chux的描述

保证unsigned char至少有8位,因此表示二进制100000的值在该类型的范围内,但应该用hex写:

 unsigned char mask = 0x20; return mask | settings; 

或者干脆:

 return 0x20 | settings; 

请注意,如果settings为二进制值00100010( 0x22 ),则它已经设置了第5位。