C#面试题更新 2026-08-05

请解释 C# 中位移运算符 << 和 >> 的用法,包括它们的作用、操作数类型、常见应用场景以及注意事项。

技术原理C#

考察说明

考查对 C# 位移运算符基本语法、行为及潜在陷阱的理解。

回答思路

  1. 【回答框架 1】位移运算符用于对整数类型(如 int、long)的二进制位进行左移或右移操作。左移运算符 << 将左侧操作数的二进制位向左移动右侧操作数指定的位数,低位补 0;右移运算符 >> 将位向右移动,对于有符号整数,高位补符号位(算术右移),对于无符号整数,高位补 0(逻辑右移)。
  2. 【回答框架 2】操作数类型:位移运算符要求左侧操作数为整数类型(int、uint、long、ulong、short、ushort、byte、sbyte 或 char),右侧操作数必须是 int 类型。如果右侧操作数超过左侧类型的位数,实际移位数会取模,例如 int 类型移动 32 位相当于移动 0 位。位移操作不会改变左侧操作数本身,而是返回新值。
  3. 【回答框架 3】常见应用:左移一位相当于乘以 2,右移一位相当于除以 2(对于有符号整数,右移是向下取整)。可用于高效实现乘除 2 的幂次、掩码操作、位标志处理、颜色分量提取等。
  4. 【回答框架 4】注意事项:右移有符号整数时,算术右移会保留符号位,可能导致结果为负数,需明确预期;位移位数取模可能导致意外结果;位移操作不检查溢出,可能产生未预期的高位丢弃。
  5. 【回答框架 5】示例:int a = 8; int b = a << 2; // b = 32,相当于 8 * 4。int c = -8; int d = c >> 2; // d = -2,算术右移。
  6. 【关键点 1】<< 左移一位相当于乘以 2,>> 右移一位相当于除以 2(整数除法)。
  7. 【关键点 2】有符号整数右移执行算术移位,无符号整数执行逻辑移位。
  8. 【关键点 3】右侧操作数需为 int,实际移位数对类型位数取模。
  9. 【关键点 4】位移操作返回新值,不修改原变量。