欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

【C語言初階】五、操作符詳解-創(chuàng)新互聯(lián)

一、算術(shù)操作符

10年積累的做網(wǎng)站、網(wǎng)站制作經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有南明免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

+、-、*、/、%

(1)希望? /? 結(jié)果是浮點(diǎn)數(shù),?分子或分母必須有一個(gè)是浮點(diǎn)數(shù)。

(2)%? 不能用于浮點(diǎn)數(shù)。

二、移位操作符

<

>> ?右移操作符

1.整數(shù)的二進(jìn)制表示3種:

(1)原碼

(2)反碼

(3)補(bǔ)碼

注:

a、正整數(shù)的原、反、補(bǔ)碼相同;

b、負(fù)整數(shù)的原、反、補(bǔ)碼需要計(jì)算。

c、對于有符號(hào)(signed)數(shù)來說,二進(jìn)制數(shù)的第一位是符號(hào)位。0代表正數(shù),1代表負(fù)數(shù);

d、整數(shù)在內(nèi)存中以補(bǔ)碼的形式存在。

e、但是打印出來的值是以原碼的形式打印的;

f、反碼求原碼兩種方法:先取反

g、?右移共有兩種,一種是算術(shù)右移,一種是邏輯右移;

?算術(shù)右移:右邊丟棄,左邊補(bǔ)原符號(hào)位;

?邏輯右移:右邊丟棄,左邊補(bǔ)0;

?而右移是哪種右移,取決于編譯器。

h、移動(dòng)的位數(shù)不能是負(fù)數(shù):如,a>>-1是錯(cuò)的。

例:int? a = 5;(32位操作系統(tǒng))

原碼:00000000000000000000000000000101

反碼:00000000000000000000000000000101

補(bǔ)碼:00000000000000000000000000000101

int b = -5;

原碼:10000000000000000000000000000101

反碼:111111111111111111111111111111111010(符號(hào)位不變,其他位取反)

補(bǔ)碼:111111111111111111111111111111111011(反碼+1)

2.移位

左移:

a<<1;移動(dòng)a的補(bǔ)碼;

左移前:00000000000000000000000000000101

左移后:00000000000000000000000000001010(左邊丟棄,右邊補(bǔ)0)

b<<1;移動(dòng)b的補(bǔ)碼

左移前:111111111111111111111111111111111011

左移后:111111111111111111111111111111110110

? 反碼:111111111111111111111111111111110101

? 原碼:10000000000000000000000000001010

右移:(算術(shù)右移)

a>>1;

右移前:00000000000000000000000000000101

右移后:00000000000000000000000000000010

?????

b>>1;

右移前:111111111111111111111111111111111011

右移后:111111111111111111111111111111111101

三、位操作符

&? ? ? ? ? //按位與

|? ? ? ? ? ?//按位或

^? ? ? ? ? ? //按位異或

操作數(shù)必須是整數(shù)。

&: 每個(gè)數(shù)的二進(jìn)制補(bǔ)碼進(jìn)行運(yùn)算,只要有一個(gè)數(shù)為0則為0,兩個(gè)數(shù)都為1,才是1.

|:? 只要有一個(gè)數(shù)為1,則為1,兩個(gè)數(shù)都是0 才是0;

^: 相同為0,相異為1,0與任何數(shù)異或都是那個(gè)數(shù)本身,兩個(gè)相同的數(shù)異或?yàn)?。

例 1:

不能創(chuàng)建臨時(shí)變量(第三個(gè)變量),實(shí)現(xiàn)兩個(gè)數(shù)的交換

方法一:(此方法問題,當(dāng)a+b的和過大,超過int的范圍時(shí),則會(huì)導(dǎo)致數(shù)據(jù)的丟失)

#includeint main()
{
    int a=3;
    int b=5;
    printf("a=%d  b=%d",a,b);
    a=a+b;
    b=a-b;
    a=a-b;
    printf("a=%d  b=%d",a,b);
    return 0;
}

方法二、

#includeint main()
{
    int a=3;
    int b=5;
    printf("a=%d  b=%d",a,b);
    a=a^b;//(1)
    b=a^b;//(2)
    a=a^b;//(3)
    printf("a=%d  b=%d",a,b);
    return 0;
}

解釋:

由異或的性質(zhì),兩個(gè)相同的數(shù)異或結(jié)果為0;

那么a=a^b;

第二個(gè)式子b=a^b; 可以看做 b=a^b^b,(兩個(gè)相同的數(shù)異或結(jié)果為0),得b=2;

第三個(gè)式子a=a^b;聯(lián)立式1和式二;可得a=a^b^a,解得a=b;

例 2:

求一個(gè)整數(shù)在內(nèi)存中存儲(chǔ)的二進(jìn)制形式有幾個(gè)1。

方法一、

#includeint main()
{
    int n=0;
    scanf("%d",&n);
    int i=0;
    int count=0;

    for(i=0;i<32;i++)
    {
        if((n>>i)&1==1)
        {
            count++;
        }
    }
    printf("%d\n",count);

    return 0;
}

四、賦值操作符

=、+=、-=、*=、/=、%=、>>=、<<=、&=、|=、^=

五、單目操作符

! ? ? ? ? ? 邏輯反操作? ->真變假,假變真->0為假,非0真。 - ? ? ? ? ? 負(fù)值 + ? ? ? ? ? 正值 & ? ? ? ? ? 取地址 sizeof ? ? ? 操作數(shù)的類型長度(以字節(jié)為單位) ~ ? ? ? ? ? 對一個(gè)數(shù)的二進(jìn)制按位取反 -- ? ? ? ? ? 前置、后置 -- ++ ? ? ? ? ? 前置、后置 ++ * ? ? ? ? ? 間接訪問操作符 ( 解引用操作符 ) ( 類型 ) ? ? ? 強(qiáng)制類型轉(zhuǎn)換

sizeof:? ?a、是操作符不是函數(shù);b、如果求變量的大小,可省去(),是類型不可省去;c、sizeof(s=a+3);括號(hào)中的表達(dá)式不參與運(yùn)算,出來后s的值不變;

例: ~? 的應(yīng)用

int a=11;
//此時(shí)二進(jìn)制為
//00000000000000000000000000001011
//想要將第三位的0變成1;
//將第三位或一個(gè)1即可
//00000000000000000000000000000100
a |= 4;
//而4是1向左移動(dòng)兩位得來的,即
a |= (1<<2);


//此時(shí)又想將或之后的數(shù)變回去,此時(shí)的二進(jìn)制數(shù)是
//00000000000000000000000000001111
//要想將第三位變回0,需要與一個(gè)0,即
//11111111111111111111111111111011
//上邊的數(shù)又是通過4取反得來的,即
//00000000000000000000000000000100取反,代碼為:

a |= (~(1<<2));

注:

a、C語言在C99之前無表示真假的類型,C99中引用了布爾類型

六、關(guān)系操作符

if("abcdefg"=="ahbhgh")

此時(shí) == 比較的是兩個(gè)數(shù)組首字母的地址。

七、邏輯操作符

&&、||

#includeint main()
{
 ? ?int i = 0,a=0,b=2,c =3,d=4;
 ? ?i = a++ && ++b && d++;
 ? ?//i = a++||++b||d++;
 ? ?printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
 ? ?return 0;
}

該代碼的輸出結(jié)果是1 2 3 4;

因?yàn)閍++是先使用后++,但最初a=0,而&&運(yùn)算符當(dāng)有一個(gè)是0 時(shí),就不繼續(xù)運(yùn)算了。

如果改為 || 的話,如果有一個(gè)為真,后邊的就不繼續(xù)計(jì)算了。

八、下標(biāo)引用、函數(shù)調(diào)用和結(jié)構(gòu)成員

下標(biāo)引用

arr[4]? ? ? 等價(jià)于? ? ?*(arr+4)? ? ? ? ? ? 等價(jià)于? ? ? 4[arr]

九、表達(dá)式求值(重要!)

? ? ? ?表達(dá)式求值的順序一部分是由操作符的優(yōu)先級(jí)和結(jié)合性決定; ? ? ? ?有些表達(dá)式的操作數(shù)在求值的過程中可能需要轉(zhuǎn)換為其他類型。

1.隱式類型轉(zhuǎn)換

整形提升:表達(dá)式中的字符和短整型操作數(shù)在使用之前被轉(zhuǎn)換為普通整型。

整形提升的方法:

int main()

{

char c1=3;

? //3是一個(gè)整型數(shù)字,二進(jìn)制序列為:

? //00000000000000000000000000000011

? //但存儲(chǔ)到char類型的變量中會(huì)發(fā)生截?cái)啵?/p>

? //00000011(在c1中的存儲(chǔ))

? char c2=127;

? //127二進(jìn)制序列為:

? //000000000000000000000000001111111

//截?cái)?/p>

? //01111111

??

? char c3 = c1 + c2;

? //在計(jì)算時(shí),需要再次將c1與c2進(jìn)行整型提升,提升為int類型,即

? //c1:? ? ? ?00000000000000000000000000000011

? //c2:? ? ? ?000000000000000000000000001111111

? //相加得:00000000000000000000000001000010

? //再次存入到char類型的c3中為

? //1000010(此時(shí)最高位1 是符號(hào)位)

? printf("%d\n",c3);

? //printf()打印是看的是原碼;

? //c3進(jìn)行整形提升,即:(對于有符號(hào)數(shù),提升時(shí)補(bǔ)符號(hào)位)

? //1111111111111111111111111000010

? //轉(zhuǎn)成原碼:

? //1000000000000000000001111101

? //結(jié)果為:126

}

2.算數(shù)轉(zhuǎn)換

如果某個(gè)操作符的各個(gè)操作數(shù)屬于不同的類型,那么除非其中一個(gè)操作數(shù)的轉(zhuǎn)換為另一個(gè)操作數(shù)的類型,否則操作就無法進(jìn)行。下面的層次體系稱為尋常算術(shù)轉(zhuǎn)換。

3.操作符的屬性?

(1)優(yōu)先級(jí)

(2)結(jié)合性

(3)是否控制求值順序

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

分享題目:【C語言初階】五、操作符詳解-創(chuàng)新互聯(lián)
URL鏈接:http://chinadenli.net/article42/eddhc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)App設(shè)計(jì)網(wǎng)站制作搜索引擎優(yōu)化靜態(tài)網(wǎng)站動(dòng)態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)