假设函数需要返回位模式00100010。
我想从右边的第5位开始返回此模式。
这有效吗?
该函数接受参数settings
,代表00100010。
unsigned char mask = 20;
return mask | settings;
或是否无法将值20
分配给unsigned char
?
答案 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位。