1樓:蘇嘉愛娛樂
>>是右移運算子,移位運算子的一種:程式設計中,位操作運算子的一種。
c語言中位移位運算子是將資料看成二進位制數,對其進行向左或向右移動若干位的運算。位移位運算子分為左移和右移兩種,均為雙目運算子。第一運算物件是移位物件,第二個運算物件是所移的二進位制位數。
位移位運算子的運算物件、運算規則與結果、結合性如表2-16所示。
移位時,移出的位數全部丟棄,移出的空位補入的數與左移還是右移有關。如果是左移,則規定補入的數全部是0;如果是右移,還與被移位的資料是否帶符號有關。若是不帶符號數,則補入的數全部為0;若是帶符號數,則補入的數全部等於原數的最左端位上的原數(即原符號位)。
擴充套件資料
優先順序:
語言中各運算子的結合性分為兩種,即左結合性(自左至右)和右結合性(自右至左)。例如算術運算子的結合性是自左至右,即先左後右。如有表示式x-y+z 則y 應先與「-」號結合,執行x-y 運算,然後再執行+z 的運算。
這種自左至右的結合 方向就稱為「左結合性」。而自右至左的結合方向稱為「右結合性」。最典型的右結合 性運算子是賦值運算子。
如x=y=z,由於「=」的右結合性,應先執行y=z 再執行x=(y=z)運算。c語言運算子中有不少為右結合性,應注意區別,以避免理解錯誤。
優先順序從上到下依次遞減,最上面具有最高的優先順序,逗號操作符具有最低的優先順序。
2樓:佼丹厙琬
c語言運算子中問號是條件運算子(與冒號組合)。該運算子是c語言中唯一一個三目運算子。
可以通過如下的例項來說明條件運算子的用法:
int a=1, b=3;
int max;
max = a>b ? a : b; // 如果a>b,則max的值為a,否則max的值為b,也即取a與b中的較大者
3樓:
右移運算子「>>」是雙目運算子。其功能是把「>> 」左邊的運算數的各二進位全部右移若干位,「>>」右邊的數指定移動的位數。
例如:設 a=15,
a>>2
表示把000001111右移為00000011(十進位制3)。
應該說明的是,對於有符號數,在右移時,符號位將隨同移動。當為正數時,最高位補0,而為負數時,符號位為1,最高位是補0或是補1 取決於編譯系統的規定。turbo c和很多系統規定為補1。
4樓:匿名使用者
就是移位指令》明顯向右移
據個例子:
15>>4就是0000 1111向右移動四位前邊補零為0000 0000
如果是有符號數即最高位是1前補1例如8f>>4即為1000 1111右移4位是1111 1000
5樓:匿名使用者
>>是右移位運算
比如 a=0x10>>1就是把0x10的2進位制編碼向右移動1位.
1000 0000 移動後變為0100 0000
c語言中有哪些運算子,各有什麼功能?
6樓:臍橙熟透了
加法運算
符 1、移位運算子
2、 關係運算子
3、相等運算子
4、 位與運算子
5、位異或運算子
6、 位或運算子
7、 邏輯與運算子
8、 邏輯或運算子
9、 三元條件運算子
10、 賦值運算子
12、逗號運算子
13、優先順序
功能介紹:
1、賦值語句的作用是把某個常量或變數或表示式的值賦值給另一個變數。符號為『=』。這裡並不是等於的意思,只是賦值,等於用『==』表示;
2、算術運算子在c語言中有兩個單目和五個雙目運算子;
3、邏輯運算子是根據表示式的值來返回真值或是假值。其實在c語言中沒有所謂的真值和假值,只是認為非0為真值,0為假值;
4、關係運算子是對兩個表示式進行比較,返回一個真/假值;
5、自增自減運算子,這是一類特殊的運算子,自增運算子++和自減運算子--對變數的操作結果是增加1和減少1;
6、賦值運算子,還有一類c/c++獨有的複合賦值運算子。它們實際上是一種縮寫形式,使得對變數的改變更為簡潔;
7、條件運算子(?:)是c語言中唯一的一個三目運算子,它是對第一個表示式作真/假檢測,然後根據結果返回兩外兩個表示式中的一個;
8、逗號運算子在c語言中,多個表示式可以用逗號分開,其中用逗號分開的表示式的值分別結算,但整個表示式的值是最後一個表示式的值;
9、優先順序和結合性,這些運算子計算時都有一定的順序,就好象先要算乘除後算加減一樣。優先順序和結合性是運算子兩個重要的特性,結合性又稱為計算順序,它決定組成表示式的各個部分是否參與計算以及什麼時候計算。
c語言運算子有什麼?都分別包括什麼意思?又有什麼用處?
7樓:匿名使用者
一、賦值運算子
賦值語句的作用是把某個常量或變數或表示式的值賦值給另一個變數。符號為『=』。這裡並不是等於的意思,只是賦值,等於用『==』表示。
注意:賦值語句左邊的變數在程式的其他地方必須要宣告。
得已賦值的變數我們稱為左值,因為它們出現在賦值語句的左邊;產生值的表示式我們稱為右值,因為她它們出現在賦值語句的右邊。常數只能作為右值。
例如:count=5;
total1=total2=0;
第一個賦值語句大家都能理解。
第二個賦值語句的意思是把0同時賦值給兩個變數。這是因為賦值語句是從右向左運算的,也就是說從右端開始計算。這樣它先total2=0;然後total1=total2;那麼我們這樣行不行呢?
(total1=total2)=0;
這樣是不可以的,因為先要算括號裡面的,這時total1=total2是一個表示式,而賦值語句的左邊是不允許表示式存在的。
二、算術運算子
在c語言中有兩個單目和五個雙目運算子。
符號 功能
+ 單目正
- 單目負
* 乘法
/ 除法
% 取模
+ 加法
- 減法
下面是一些賦值語句的例子, 在賦值運算子右側的表示式中就使用了上面的算術運算子:
area=height*width;
num=num1+num2/num3-num4;
運算子也有個運算順序問題,先算乘除再算加減。單目正和單目負最先運算。
取模運算子(%)用於計算兩個整數相除所得的餘數。例如:
a=7%4;
最終a的結果是3,因為7%4的餘數是3。
那麼有人要問了,我要想求它們的商怎麼辦呢?
b=7/4;
這樣b就是它們的商了,應該是1。
也許有人就不明白了,7/4應該是1.75,怎麼會是1呢?這裡需要說明的是,當兩個整數相除時,所得到的結果仍然是整數,沒有小數部分。
要想也得到小數部分,可以這樣寫7.0/4或者7/4.0,也即把其中一個數變為非整數。
那麼怎樣由一個實數得到它的整數部分呢?這就需要用強制型別轉換了。例如:
a=(int) (7.0/4);
因為7.0/4的值為1.75,如果在前面加上(int)就表示把結果強制轉換成整型,這就得到了1。那麼思考一下a=(float) (7/4);最終a的結果是多少?
單目減運算子相當於取相反值,若是正值就變為負值,若是負數就變為正值。
單目加運算子沒有意義,純粹是和單目減構成一對用的。
三、邏輯運算子
邏輯運算子是根據表示式的值來返回真值或是假值。其實在c語言中沒有所謂的真值和假值,只是認為非0為真值,0為假值。
符號 功能
&& 邏輯與
|| 邏輯或
! 邏輯非
例如:5!3;
0||-2&&5;
!4;當表示式進行&&運算時,只要有一個為假,總的表示式就為假,只有當所有都為真時,總的式子才為真。當表示式進行||運算時,只要有一個為真,總的值就為真,只有當所有的都為假時,總的式子才為假。邏輯非(!
)運算是把相應的變數資料轉換為相應的真/假值。若原先為假,則邏輯非以後為真,若原先為真,則邏輯非以後為假。
還有一點很重要,當一個邏輯表示式的後一部分的取值不會影響整個表示式的值時,後一部分就不會進行運算了。例如:
a=2,b=1;
a||b-1;
因為a=2,為真值,所以不管b-1是不是真值,總的表示式一定為真值,這時後面的表示式就不會再計算了。
四、關係運算子
關係運算子是對兩個表示式進行比較,返回一個真/假值。
符號 功能
> 大於
< 小於
>= 大於等於
<= 小於等於
== 等於
!= 不等於
這些運算子大家都能明白,主要問題就是等於==和賦值=的區別了。
一些剛開始學習c語言的人總是對這兩個運算子弄不明白,經常在一些簡單問題上出錯,自己檢查時還找不出來。看下面的**:
if(amount=123) ……
很多新人都理解為如果amount等於123,就怎麼樣。其實這行**的意思是先賦值amount=123,然後判斷這個表示式是不是真值,因為結果為 123,是真值,那麼就做後面的。如果想讓當amount等於123才執行時,應該if(amount==123) ……
五、自增自減運算子
這是一類特殊的運算子,自增運算子++和自減運算子--對變數的操作結果是增加1和減少1。例如:
--couter;
couter--;
++amount;
amount++;
看這些例子裡,運算子在前面還是在後面對本身的影響都是一樣的,都是加1或者減1,但是當把他們作為其他表示式的一部分,兩者就有區別了。運算子放在變數前面,那麼在運算之前,變數先完成自增或自減運算;如果運算子放在後面,那麼自增自減運算是在變數參加表示式的運算後再運算。這樣講可能不太清楚,看下面的例子:
num1=4;
num2=8;
a=++num1;
b=num2++;
a =++num1;這總的來看是一個賦值,把++num1的值賦給a,因為自增運算子在變數的前面,所以num1先自增加1變為5,然後賦值給a,最終a也為5。b=num2++;這是把num2++的值賦給b,因為自增運算子在變數的後面,所以先把num2賦值給b,b應該為8,然後num2自增加1變為 9。
那麼如果出現這樣的情況我們怎麼處理呢?
c=num1+++num2;
到底是c=(num1++)+num2;還是c=num1+(++num2);這要根據編譯器來決定,不同的編譯器可能有不同的結果。所以我們在以後的程式設計當中,應該儘量避免出現上面複雜的情況。
六、複合賦值運算子
在賦值運算子當中,還有一類c/c++獨有的複合賦值運算子。它們實際上是一種縮寫形式,使得對變數的改變更為簡潔。
total=total+3;
乍一看這行**,似乎有問題,這是不可能成立的。其實還是老樣子,'='是賦值不是等於。它的意思是本身的值加3,然後在賦值給本身。為了簡化,上面的**也可以寫成:
total+=3;
複合賦值運算子有下列這些:
符號 功能
+= 加法賦值
-= 減法賦值
*= 乘法賦值
/= 除法賦值
%= 模運算賦值
<<= 左移賦值
>>= 右移賦值
&= 位邏輯與賦值
|= 位邏輯或賦值
^= 位邏輯異或賦值
上面的十個複合賦值運算子中,後面五個我們到以後位運算時再說明。
那麼看了上面的複合賦值運算子,有人就會問,到底total=total+3;與total+=3;有沒有區別?答案是有的,對於a=a+1,表示式a被計算了兩次,對於複合運算子a+=1,表示式a僅計算了一次。一般的來說,這種區別對於程式的執行沒有多大影響,但是當表示式作為函式的返回值時,函式就被呼叫了兩次(以後再說明),而且如果使用普通的賦值運算子,也會加大程式的開銷,使效率降低。
七、條件運算子
條件運算子(?:)是c語言中唯一的一個三目運算子,它是對第一個表示式作真/假檢測,然後根據結果返回兩外兩個表示式中的一個。
《表示式1>?《表示式2>:《表示式3>
在運算中,首先對第一個表示式進行檢驗,如果為真,則返回表示式2的值;如果為假,則返回表示式3的值。
例如:a=(b>0)?b:-b;
當b>0時,a=b;當b不大於0時,a=-b;這就是條件表示式。其實上面的意思就是把b的絕對值賦值給a。
八、逗號運算子
在c語言中,多個表示式可以用逗號分開,其中用逗號分開的表示式的值分別結算,但整個表示式的值是最後一個表示式的值。
假設b=2,c=7,d=5,
a1=(++b,c--,d+3);
a2=++b,c--,d+3;
對於第一行**,有三個表示式,用逗號分開,所以最終的值應該是最後一個表示式的值,也就是d+3,為8,所以a=8。對於第二行**,那麼也是有三個表示式,這時的三個表示式為a2=++b、c--、d+3,(這是因為賦值運算子比逗號運算子優先順序高)所以最終表示式的值雖然也為8,但a2=3。
還有其他的如位邏輯運算子,位移運算子等等,我們等到講位運算時再說明。
九、優先順序和結合性
從上面的逗號運算子那個例子可以看出,這些運算子計算時都有一定的順序,就好象先要算乘除後算加減一樣。優先順序和結合性是運算子兩個重要的特性,結合性又稱為計算順序,它決定組成表示式的各個部分是否參與計算以及什麼時候計算。
下面是c語言中所使用的運算子的優先順序和結合性:
優先順序 運算子 結合性
(最高) () -> . 自左向右
! ~ ++ -- + - * & sizeof 自右向左
* / % 自左向右
+ - 自左向右
<< >> 自左向右
< <= > >= 自左向右
== != 自左向右
& 自左向右
^ 自左向右
| 自左向右
&& 自左向右
|| 自左向右
?: 自右向左
= += -= *= /= %= &= ^= |= <<= >>= 自右向左
(最低) , 自左向右
c語言運算子,C語言 運算子 是怎麼運算的
9除以5商1餘4 不是說小數最後位是餘數 餘數就是在整數的除法中,只有能整除與不能整除兩種情況。當不能整除時,就產生餘數,所以餘數問題在小學數學中非常重要。餘數有如下一些重要性質 a,b,c均為自然數 1 餘數小於除數。2 被除數 除數 商 餘數 除數 被除數 餘數 商 商 被除數 餘數 除數。3 ...
C條件運算子,條件運算子和是什麼意思
條件表示式 bai 表示式du1?表示式2 表示式3 條件表示式的zhi執行順序 先dao求解表示式1,若為真則求版解表示式2,此時權表示式2的值就作為整個表示式的值。若表示式1的值為假,則求解表示式3,表示式3的值就是整個條件表示式的值。先計算x y 表示式1 然後 aa 表示式2 x y?bb ...
c語言賦值運算子是什麼意思,c語言中規定賦值運算子的左邊必須是什麼
i j i i j i j i i copy j i 1 i i 1 以此類推 bai 與運算 或運算 異或運算 向右du移位 向左移位 你自己寫zhi個簡單dao 的驗證一下看看對不對 c語言中規定 賦值運算子的左邊必須是什麼?賦值運算子的左邊必bai須是變數。簡單du賦值運zhi算符記為 由 連...