当我运行此代码时 -
string binNumber="11111000001";
for(int ind=0; ind<binNumber.Length; ind++){
Console.WriteLine(binNumber[ind]&'1');
}
它打印49和48而不是1和0的序列。
我无法理解为什么会这样?如果我使用XOR运算符,它会打印1s&amp; 0。我已经看到了这种行为。和|运营商。 可以在IdeOne中访问代码 - https://ideone.com/fqZFUY。
答案 0 :(得分:1)
'0'
的代码为48(十进制)或110000(二进制)。
'1'
的代码为十进制49,或二进制为110001。
110000&amp; 110001 == 110000 == 48十进制
110001&amp; 110001 == 110001 == 49十进制
所以当你Console.WriteLine(binNumber[ind]&'1');
时,你会得到48或49,具体取决于binNumber[ind]
是'0'还是'1'。
请记住,如果执行someChar & someOtherChar
,编译器会对这些字符的数值进行按位AND运算。
答案 1 :(得分:0)
两个&
之间的char
操作类型为int
。如果您尝试,可以看到它:
var res = '0' & '0';
然后查看res
的类型。 (从技术上讲,这称为“二进制数字促销”,在这种情况下会发生的情况是char
都转换为int
,然后&
在两个int
之间完成,显然结果是int
。如果您感兴趣,请解释here)
结果是int
,Console.WriteLine
将其格式化为int
。
尝试
Console.WriteLine((char)(binNumber[ind]&'1'));