關於C語言基本運算的一些注意點

來源:互聯網
上載者:User

標籤:

C語言為何這麼強大呢?其中之一就是因為他擁有強大的運算能力,除了簡單的加減乘除等算術運算,還有取餘運算(%)、賦值運算(=)、自增自減運算(++、--)、求位元組數(sizeof)、關係運算(==、>、<、>=、<=)、邏輯運算(與、或、非)以及三目運算(條件?數值1:數值2)
下面我列出其中的一些小細節
第一個程式:
#include<stdio.h>
int main(){

int a = -10 % 3;
printf("%d\n",a);

}
對比
#include<stdio.h>
int main(){

int a = 10 % -3;
printf("%d\n",a);

}
第一程式輸出的結果是:-1,第二個的輸出結果是:1
結論:取餘運算(或者叫模運算)的兩邊首先必須是整數(可以是負數),餘數的正負依賴%前邊數值的正負

第二個程式
#include<stdio.h>
int main(){

int a = 10.5;
printf("%d\n",a);

}

第三個程式
#include<stdio.h>
int main(){

double b = 11/4;
printf("%d\n",b);

}
第二個程式的輸出結果是:10,第三個程式的輸出結果是:3
結論:因為a為int型,而10.5是double型所以將double自動轉換成int型,我們也可以這樣改:
int a = (int) 10.5;
這種方法是強制類型轉換;第三個程式中由於10和4都為整型數值所以輸出結果肯定是整型,即使b的類型是double型,結果還是3,要想結果變成3.75,可以這樣修改:
double b = 9.0/4;或者double b = 9/4.0;或者double b = (double)9/4;

第四個程式
#include<stdio.h>
int main(){
int a = 4;
a *= 2 + 3;
printf("%d\n",a);

}
這個程式的輸出結果是:20
結論:複合賦值運算子後面是一個整體,相當於一個小括弧將他們括起來了,之後再作相應的複合賦值

第五個程式
#include<stdio.h>
int main(){
int a = 4;
printf("%d,%d\n",a,a++);

}

第六個程式
#include<stdio.h>
int main(){
int a = 4;
printf("%d,%d\n",++a,a);

}
這兩個程式的結果都是:5,4
結論:為啥會是這個結果呢?首先我們要理解a++與++a的區別,前者是先將數值a的原值執行運算,後將數值增一,後者正好相反,先將原值增一,然後執行計算,至於為啥兩者結果都是一樣,這是由於printf函數在編譯器中的計算順序是從右往左,(因編譯器不同,也可能是從左往右)所以導致了這樣的結果

第七個程式
#include<stdio.h>
int main(){
int a = 4;
printf("%d,%d,%d\n",sizeof a,sizeof 4,sizeof (int));

}
輸出結果為:4,4,4
結論:只需要注意sizeof後面要是跟上的是基本類型標識符的話 必須加上小括弧其他的可加可不加

至於關係運算子我們需要注意的每一個關係運算式都有個一傳回值(非0即1,0的話即為假,1的話即為真),邏輯與和邏輯或的集合方向都是自左向右,邏輯運算子的兩邊一般是能判斷出真假的條件,但是也可以跟上任何一個常數,非0常數表示真,0即為假

第八個程式
#include<stdio.h>
int main(){
int a = 4;
int b = 6;
int c= a<3 && b++;
printf("%d,%d,%d\n",a,b,c);

}
輸出結果為4,6,0
結論:當判斷完邏輯與左邊的為假時,C語言是不會判斷右邊的真假,直接得出結果,同理,要是判斷完邏輯或左邊的為真時,他也是不會進行右邊真假的判斷的

C語言中,運算也是有一定的先後順序,就像我們小學裡學到的要先乘除後加減有括弧的先算括弧,C語言中各種運算也是要講究運算的優先順序別的,我們就拿三目運算來說,請看代碼:
int main()
{

int c = 10;
int d = 24;

//將c和d中較大者與2相加賦值給變數a
int a = 2 + (c > d)? c : d;
printf("%d\n",a);

return 0;
}

當我們編譯串連的時候Xcode會警告我們的,因為+的優先順序別高於三目運算子,所以你這樣先完後 ?的前面永遠是真,程式始終會將c的值加2賦值給a,所以只有將程式的第三行代碼改為:int a = 2 + ((c > d)? c : d); 這樣才會保證你想要的結果。

結論:當我們用到C語言進行一些運算時,一定要注意優先順序,一旦一個式子中有過多的運算子,一般他的可讀性是很差的,這時我們就要將複雜的算式拆成多行代碼,保證程式的可讀性,另一方面也能保證程式會按照我們的思路進行下去。

 

關於C語言基本運算的一些注意點

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.