voidmain()
{
inta=066;
printf("~a=%d",~a);
}
運行結果:
~a=-55(注,結果為十進製)
5.左移運算符()
左移運算符“”是雙目運算符,其功能是把左邊的操作數的二進位全部向左移動由右邊的操作數(該操作數非負)指定的位數,高位左移溢出則舍棄,低位補0。
[例1213]253。
將25的二進製數00011001左移3位,得到11001000,右邊空出的位補0,左邊溢出的位舍棄。
C語言源代碼:
#include
voidmain()
{
inta=25;
printf("%d",a3);
}
運行結果:
200
左移1位相當於該數乘以2,左移3位相當於該數乘以23=8,即253=200。但此結論隻適用於該數左移時被溢出舍棄的高位全為0的情況。
6.右移運算符()
右移運算符“”是雙目運算符,其功能是把左邊操作數的二進位全部向右移動由右邊操作數所指定的位數(右操作數必須是非負值),移到右端的低位被舍棄。
[例1214]151。
把15的二進製000001111右移一位後為00000111(十進製數為7)。
C語言源代碼:
#include"stdio.h"
voidmain()
{
inta=15;
printf("a=%d",a1);
}
運行結果:
a=7
其中,對於無符號數,高位補0,對於有符號數,有些機器通過“算術移位”對左邊空出部分用符號位填補,而有些機器則通過“邏輯移位”對左邊空出的部分用0填補。對於負數,TC和很多係統規定補1。
[例1215]a的八進製值為101216,則a的二進製數為1000001010001110。
邏輯右移a1:0100000101000111
算術右移a1:1100000101000111
TC和其他一些C語言編譯係統采用的是算術右移,即對有符號數右移時,如果符號位原來為1,左麵移入高位的是1。
C語言源代碼:
#include
voidmain()
{
inta=0101216;
printf("%o",a1);
}
運行結果:
140507(注,該數為八進製)
7.位運算賦值運算符
位運算符與賦值運算符可以組成複合賦值運算符。例如:&=,|=,=,=,∧=。a&=b相當於a=a&b,a=2相當於a=a2。
在此不再贅述。