国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C語言操作符練習

這篇具有很好參考價值的文章主要介紹了C語言操作符練習。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

練習開胃菜

曾經(jīng)有一道面試題,要求不能創(chuàng)建臨時變量(第三個變量),實現(xiàn)兩個數(shù)的交換。

這道題如果沒有前半句的修飾,就只是簡單的一道基礎(chǔ)題。

法一:

#include <stdio.h>
int main()
{
	int a = 0;
	int b = 10;
	printf("交換前:a=%d,b=%d\n", a, b);
	int tmp = a;
	a = b;
	b = tmp;
	printf("交換后:a=%d,b=%d\n", a, b);
	return 0;
}

但是如果加上了前半句的修飾,就需要更換思路了。

法二:

#include <stdio.h>
int main()
{
	int a = 0;
	int b = 10;
	printf("交換前:a=%2d,b=%2d\n", a, b);
	a = a + b;
	b = a - b; //a + b - b = a
	a = a - b; //a + b - a = b
	printf("交換后:a=%2d,b=%2d\n", a, b);
	return 0;
}

第二種方法比第一種方法更考驗思維,但是中方法也有弊端,如果a和b兩個數(shù)無限接近計算機能夠儲存的最大值,那結(jié)果將不再準確。

法三:

#include <stdio.h>
int main()
{
 int a = 10;
 int b = 20;
 a = a ^ b; //a 變成了 a^b
 b = a ^ b; //a ^ b ^ b = a   相同為0,b變成了a
 a = a ^ b; //a ^ b ^ a = b   
 printf("a = %d b = %d\n", a, b);
 return 0;
}

這就是我想講述的重點:^ 按位異或操作符,二進制位相同為0,相異為1.

技巧1:a ^ 0?= a;

技巧2:a ^ a = 0;

練習1:

編寫代碼實現(xiàn):求?個整數(shù)存儲在內(nèi)存中的?進制中1的個數(shù)。
#include <stdio.h>
int main()
{
 int num = 10;
 int count= 0;//計數(shù)
 while(num)
 {
 if(num%2 == 1)
 count++;
 num = num/2;
 }
 printf("?進制中1的個數(shù) = %d\n", count);
 return 0;
}

這種方法不能計算負數(shù),所以引入下面的方法

#include <stdio.h>
int main()
{
 int num = -1;
 int i = 0;
 int count = 0;//計數(shù)
 for(i=0; i<32; i++)
 {
 if( num & (1 << i) )
 count++; 
 }
 printf("?進制中1的個數(shù) = %d\n",count);
 return 0;
}



//優(yōu)化版
#include <stdio.h>
int main()
{
 int num = -1;
 int i = 0;
 int count = 0;//計數(shù)
 while(num)
 {
 count++;
 num = num&(num-1);
 }
 printf("?進制中1的個數(shù) = %d\n",count);
 return 0;
}

優(yōu)化版的方法是很難想到的,所以我們要多見,多去思考別人的代碼,這樣有助于我們的提升。

練習2:

?進制位置0或者置1 ,編寫代碼將13?進制序列的第5位修改為1,然后再改回0。

13 2 進制序列: 00000000000000000000000000001101
將第 5 位置為 1 后: 00000000000000000000000000011101
將第 5 位再置為 0 00000000000000000000000000001101
#include <stdio.h>
int main()
{
 int a = 13;
 a = a | (1<<4);
 printf("a = %d\n", a);
 a = a & ~(1<<4);
 printf("a = %d\n", a);
 return 0;
}

這里巧妙運用了位操作符,各位可以總結(jié)一下。

問題表達式舉例

1、a*b + c*d + e*f

// 表達式的求值部分由操作符的優(yōu)先級決定。
????????表達式1在計算的時候,由于 * ? + 的優(yōu)先級?,只能保證, * 的計算是? + 早,但是優(yōu)先級并不能決定第三個 * ?第?個 + 早執(zhí)?,因此表達式的計算順序不一。

2、?c + --c;

????????同上,操作符的優(yōu)先級只能決定?減 -- 的運算在 + 的運算的前?,但是我們并沒有辦法得知, + 操作符的左操作數(shù)的獲取在右操作數(shù)之前還是之后求值,所以結(jié)果是不可預測的,是有歧義的。

3、?

int i = 10 ;
i = i-- - --i * ( i = -3 ) * i++ + ++i;
printf ( "i = %d\n" , i);
這道題再不同編譯器中的結(jié)果也不同
C語言操作符練習,c語言,算法

4、

int fun()
{
 static int count = 1;
 return ++count;
}
int main()
{
 int answer;
 answer = fun() - fun() * fun();
 printf( "%d\n", answer);//輸出多少?
 return 0;
}

?這個代碼實際上有問題,雖然在大多數(shù)的編譯器上求得的結(jié)果都是相同的。

但是上述代碼 answer = fun() - fun() * fun(); 中我們只能通過操作符的優(yōu)先級得知:先
算乘法,再算減法。而函數(shù)的調(diào)用先后順序我們無法通過操作符的優(yōu)先級確定。
5、
#include <stdio.h>
int main()
{
 int i = 1;
 int ret = (++i) + (++i) + (++i);
 printf("%d\n", ret);
 printf("%d\n", i);
 return 0;
}

這道題在gcc上的編譯結(jié)果為 10 、4,在vs2022上的編譯結(jié)果為 12、4.

????????這段代碼中的第?個 + 在執(zhí)?的時候,第三個++是否執(zhí)?,這個是不確定的,因為依靠操作符的優(yōu)先級和結(jié)合性是?法決定第?個 + 和第三個前置 ++ 的先后順序。所以在不同的編譯器上的優(yōu)先級影響了結(jié)果。

結(jié)合本期與上期內(nèi)容,我們要知道:

???????? 即使有了操作符的優(yōu)先級和結(jié)合性,我們寫出的表達式依然有可能不能通過操作符的屬性確定唯?的計算路徑,那這個表達式就是存在潛在?險的,建議不要寫出特別復雜的表達式。

?文章來源地址http://www.zghlxwxcb.cn/news/detail-827610.html

到了這里,關(guān)于C語言操作符練習的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【C語言】操作符

    【C語言】操作符

    算術(shù)操作符 移位操作符 位操作符 賦值操作符 單目操作符 關(guān)系操作符 邏輯操作符 條件操作符 逗號操作符 下標引用、函數(shù)調(diào)用和結(jié)構(gòu)成員操作符 除了 % 操作符之外,其他的幾個操作符可以作用于整數(shù)和浮點數(shù)。 對于 / 操作符如果兩個操作數(shù)都為整數(shù),執(zhí)行整數(shù)除法。而只

    2024年01月16日
    瀏覽(27)
  • <C語言> 操作符

    <C語言> 操作符

    加法(+):用于將兩個操作數(shù)相加。 減法(-):用于將第一個操作數(shù)減去第二個操作數(shù)。 乘法(*):用于將兩個操作數(shù)相乘。 除法(/):用于將第一個操作數(shù)除以第二個操作數(shù)。 取模(%):用于求兩個操作數(shù)相除的余數(shù)。 乘法、除法和取模具有相同的優(yōu)先級,高于加法

    2024年02月12日
    瀏覽(20)
  • C語言初級<操作符>

    C語言初級<操作符>

    C語言是一門面向過程的、抽象化的通用程序設(shè)計語言,廣泛應(yīng)用于底層開發(fā)。C語言能以簡易的方式編譯、處理低級存儲器。C語言是僅產(chǎn)生少量的機器語言以及不需要任何運行環(huán)境支持便能運行的高效率程序設(shè)計語言。 本篇文章是基于C語言,對入門小知識操作符的講解,展

    2024年02月12日
    瀏覽(21)
  • C語言的操作符

    C語言中的操作符是用于操作變量、常量和表達式的符號,以下是我學習操作符整理的相關(guān)知識點。 算數(shù)操作符: + - * / % + 、 - 、 * 、 / 可以用于操作整數(shù)和浮點數(shù) % 只能操作整數(shù),返回整除后的余數(shù) 左移操作符 右移操作符 這兩個只能用于整數(shù) 操作符 操作符 位操作符: | ^

    2024年02月01日
    瀏覽(15)
  • C語言---操作符詳解

    C語言---操作符詳解

    算術(shù)操作符 移位操作符 位操作符 賦值操作符 單目操作符 關(guān)系操作符 邏輯操作符 條件操作符 逗號操作符 下標引用、函數(shù)調(diào)用和結(jié)構(gòu)成員。 移位操作符,移動的是二進制位。 警告:對于移位運算符,不要移動負位數(shù),這個是標準定義的。 3.1.1、原碼、反碼、補碼介紹 整數(shù)

    2024年02月07日
    瀏覽(52)
  • C語言——操作符詳解

    C語言——操作符詳解

    哈嘍,大家好,今天我們來學習C語言中的各中操作符。 目錄 1.操作符的分類 2.算數(shù)操作符 整數(shù)的二進制表示 3.位移操作符 3.1左移操作符 3.2右移操作符 4.位操作符 5.賦值操作符 6.單目操作符 6.1 單目操作符介紹 ~ 的用法: 6.2 sizeof 和 數(shù)組 7.關(guān)系操作符 8.邏輯操作符 9. 條件操

    2024年02月05日
    瀏覽(22)
  • 【C語言】操作符詳解

    【C語言】操作符詳解

    ??個人主頁:Weraphael ???作者簡介:目前正在回爐重造C語言(2023暑假) ??專欄:【C語言航路】 ?? 希望大家多多支持,咱一起進步!?? 如果文章對你有幫助的話 歡迎 評論?? 點贊???? 收藏 ?? 加關(guān)注?? 算術(shù)操作符 位移操作符 位操作符 賦值操作符 單目操作符 關(guān)

    2024年02月16日
    瀏覽(25)
  • c語言---操作符(詳解)

    c語言---操作符(詳解)

    算術(shù)操作符: + 、- 、*、/ 、% 移位操作符: 位操作符: | ^ ` 賦值操作符: = 、+= 、 -= 、 = 、 /= 、%= 、= 、= 、= 、|= 、^= 單?操作符: !、++、–、、 、+、-、~ 、sizeof、(類型) 關(guān)系操作符: 、= 、 、= 、 == 、 != 邏輯操作符: 、|| 條件操作符: ? : 逗號表達式: , 下標引?: [

    2024年02月22日
    瀏覽(25)
  • C語言操作符例題

    感謝各位大佬對我的支持,如果我的文章對你有用,歡迎點擊以下鏈接 ?????? 個人主頁 ?????? C語言 ????????? C語言例題 ?????? python 下面代碼的結(jié)果是:( ) A.a = 8 b = 23 c = 8 B.a = 9 b = 23 c = 8 C.a = 9 b = 25 c = 8 D.a = 9 b = 24 c = 8 答案 B c=++a是先執(zhí)行++a,也就是a=a+1=6(注意這

    2024年02月04日
    瀏覽(18)
  • C語言:“~”操作符詳解

    ~:含義及用法舉例 文章目錄 前言 一、“~”是什么? 二、原碼、反碼及補碼 1.簡介 2.用法舉例 ①正整數(shù) ②負整數(shù) ③零 三、“~”操作符 1.簡介 2.用法舉例 ①正整數(shù) ②負整數(shù) ③零 本文在簡單介紹原碼反碼補碼的基礎(chǔ)上,介紹“~”操作符的用法。 ~:一種單目操作符,即對

    2024年02月10日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包