取補運算對操作數的每一位取補,如對10取補結果為:
10的二進制表示:00001010
取補運算結果:11110101
這個二進制對應的具體值與數據類型有關,下面的例子清楚地說明了這一點。
程序清單7-5:
using System;
class Test
{
public static void Main(){
short a=10;
ushort b=10;
int c=10;
uint d=10;
Console.WriteLine(~10);
Console.WriteLine("short:{0}",~a);
Console.WriteLine("ushort:{0}",~b);
Console.WriteLine("int:{0}",~c);
Console.WriteLine("uint:{0}",~d);
}
}
正確的輸出是:
-11
short:-11
ushort:-11
int:-11
uint:4294967285
移位運算
左移運算將操作數按位左移,高位被丟棄,低位順序補0。比如10的二進制為00001010,左移一位為00010100(20),左移二位為00101000(40)。
右移運算時,如果操作數x是int或long型時,x的低位被丟棄,其它各位順序依次右移,如果x是非負數,最高位設成零;如果x為負數,則最高位設為1。而當x的類型為uint或ulong型時,x的低位將被丟棄,其它各位順序依次右移,高位設為0。比如:
程序清單7-6:
using System;
class Test
{
public static void Main(){
int x=16;
Console.WriteLine(x);
int y=x>>2;
Console.WriteLine(y);
y=y>>2;
Console.WriteLine(y);
y=y>>2;
Console.WriteLine(y);
}
}
上面這段程序的輸出為:
16
4
1
0
如果把上面x的初始值設為-16,則程序的輸出為:
-16
-4
-1
-1