您可以为无符号字符分配什么值?

时间:2017-02-10 05:33:53

标签: c

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

我想从右边的第5位开始返回此模式。

这有效吗?

该函数接受参数settings,代表00100010。

unsigned char mask = 20; 
return mask | settings;  

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

3 个答案:

答案 0 :(得分:1)

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

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

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

如果您使用printf("%c\n",var) int参数转换为unsigned char,并且编写了生成的字符,那么无论您执行var = 'a'还是var = 97 {1}}

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

答案 1 :(得分:1)

  

您可以为String[] projection = new String[]{"DISTINCT " + DBConstants.COLUMN_UUID, ... }; 指定哪些值?

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

最大值unsigned char<limits.h>

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

如果将此范围之外的整数值分配给UCHAR_MAX,则通过在范围内添加/减去unsigned char来减少该值。

以下代码没问题,但不清楚20是否是需要的掩码或十六进制0x20。

UCHAR_MAX + 1

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

答案 2 :(得分:0)

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

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

或简单地说:

return 0x20 | settings;

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