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

如何对整数或字节的所有位取反,使用XOR运算符实现位翻转

错误原因

  • 移位操作逻辑错误:C#中对int类型做移位运算时,移位长度只会取右操作数的低5位(即对32取模),你定义的key=255,实际有效移位长度是255 % 32 = 31,x[0] << 31和原值异或的操作完全不符合逐位翻转的需求。
  • 运算符选择错误:你后续尝试的按位或|、按位与&本身没有位翻转的能力,只有按位异或^可以实现「和1异或则翻转、和0异或则保留」的效果。

正确实现逻辑

逐位翻转整数/字符的位,核心是和对应位数的全1掩码做异或运算,不需要移位操作:

  • 若要翻转char(C#中为16位UTF-16字符)的全部位,掩码用0xFFFF
  • 若要翻转int(32位有符号整数)的全部位,掩码用0xFFFFFFFF

代码示例

public string text = "password";
// 翻转单个字符的位示例
char originalChar = text[0];
// 和16位全1掩码异或,实现逐位翻转
char flippedChar = (char)(originalChar ^ 0xFFFF);
// 如果要翻转整个字符串的所有字符
char[] flippedChars = text.Select(c => (char)(c ^ 0xFFFF)).ToArray();
string flippedText = new string(flippedChars);

// 如果是要翻转int类型的32位全部位
int originalInt = 12345;
int flippedInt = originalInt ^ unchecked((int)0xFFFFFFFF);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:24:10