我遇到了以下问题:当尝试强制转换为unsigned char时,我得到了意外的值。我正在使用的代码:
unsigned char MyVal1 = ((0xF1E3 && 0xff00) >> 8);
unsigned char MyVal2 = (unsigned char)((0xF1E3 && 0xff00) >> 8);
unsigned char MyVal3 = (unsigned char)((0xF1E3 && 0xff));
我将所有三个变量存储在一个数组中。
我得到的输出(查看数组中的值;数组是unsigned char数组):
0x00
0x00
0x01
虽然我在期待:
0xF1
0xF1
0xE3
有人可以帮助我解决我的错误吗?
答案 0 :(得分:12)
运算符&&
和&
在整数上的作用不同。您的操作数首先转换为bool(零/非零),然后and
一起转换。
答案 1 :(得分:10)
&&
是布尔和运算符;如果其操作数均为非零,则给出1
,否则为0
。您需要按位和运算符&
,它在其操作数的每个位中提供1
或0
。