You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用&运算符对两个字符进行按位与运算的原理咨询

按位与运算符在C# char类型中的工作原理解析

让我一步步帮你拆解这个运算过程,搞清楚为什么'ࡴ' & 'a'会得到`这个结果:

1. 先明确C#中char的本质

C#的char类型是16位的UTF-16编码单元,所以计算按位与时,是基于字符的UTF-16二进制值,而不是你提到的UTF-8编码。我们先把两个字符转成对应的UTF-16二进制:

  • 字符'a'的Unicode码点是U+0061,UTF-16值就是0x0061,二进制为:00000000 01000001
  • 字符'ࡴ'的Unicode码点是U+0874,它属于BMP(基本多语言平面),所以UTF-16是单个编码单元0x0874,二进制为:00001000 01110100

2. 按位与运算符&的规则

按位与是对两个数的每一位独立运算,规则非常简单:

只有当两个数的对应位都为1时,结果的该位才是1;否则为0。

3. 实际计算过程

我们把两个UTF-16的二进制对齐,逐位进行按位与:

00001000 01110100  // 'ࡴ'的UTF-16二进制 (0x0874)
& 00000000 01000001  // 'a'的UTF-16二进制 (0x0061)
  -----------------
  00000000 01000000  // 运算结果的二进制,对应十六进制0x0060

4. 结果对应的字符

Unicode码点U+0060对应的字符就是反引号,所以Console.WriteLine`输出的就是这个字符。

补充:为什么你的UTF-8编码没用到?

你提到的'ࡴ'的UTF-8编码(11100000:10100001:10110100)是它在存储或传输时的编码格式,但C#在内存中存储char时用的是UTF-16,所以计算按位与时只会使用UTF-16的二进制值,这一点要注意区分哦。

你的测试代码回顾

char comp58 = 'a';
char comp96 ='\u0874';
Console.WriteLine(comp96&=comp58);

内容的提问来源于stack exchange,提问作者Eric Movsessian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 18:12:39