两个字符的按位与输出错误结果
本文关键字:位与 输出 错误 结果 字符 两个 | 更新日期: 2023-09-27 17:55:04
当我运行这段代码-
string binNumber="11111000001";
for(int ind=0; ind<binNumber.Length; ind++){
Console.WriteLine(binNumber[ind]&'1');
}
打印49和48的序列,而不是1和0。
我不明白为什么会发生这种事?如果我使用异或运算符,它会输出1 &0年代。我在&和|运算符。代码可以在IdeOne中访问- https://ideone.com/fqZFUY.
'0'
的十进制编码为48,二进制编码为110000。
'1'
的十进制编码为49,二进制编码为110001。
110000,110001 == 110000 == 48 decimal
110001,110001 == 110001 == 49 decimal
所以当你做Console.WriteLine(binNumber[ind]&'1');
时,你得到48或49取决于binNumber[ind]
是'0'还是'1'。
请记住,如果您执行someChar & someOtherChar
,编译器会对这些字符的数值进行位与运算。
两个char
之间的&
操作类型为int
。你可以输入:
var res = '0' & '0';
,看看res
的类型。(从技术上讲,这被称为"二进制数字提升",在这种情况下发生的是,两个char
都转换为int
,然后&
在两个int
之间完成,显然结果是int
。如果你感兴趣,这里有解释)
作为int
的结果,Console.WriteLine
将其格式化为int
。
试
Console.WriteLine((char)(binNumber[ind]&'1'));