/// <summary> /// 無符號右移, 相當於java里的 value>>>pos /// </summary> /// <param name="value"></param> /// <param name="pos"></param> /// <returns></returns> public static int RightMove(this int value, int pos) { //移動 0 位時直接返回原值 if (pos != 0) { // int.MaxValue = 0x7FFFFFFF 整數最大值 int mask = int.MaxValue; //無符號整數最高位不表示正負但操作數還是有符號的,有符號數右移1位,正數時高位補0,負數時高位補1 value = value >> 1; //和整數最大值進行邏輯與運算,運算后的結果為忽略表示正負值的最高位 value = value & mask; //邏輯運算后的值無符號,對無符號的值直接做右移運算,計算剩下的位 value = value >> pos - 1; } return value; }