【零基礎(chǔ)學(xué)C語(yǔ)言】知識(shí)總結(jié)三:運(yùn)算符、進(jìn)制轉(zhuǎn)換、輸入輸出

進(jìn)制之間的轉(zhuǎn)換
其他進(jìn)制轉(zhuǎn)換為二進(jìn)制
1、八轉(zhuǎn)二:123.6,首先,將每一位數(shù)字,一分為三。1=001? 2=010? 3=011? ? 0.6=110
然后合起來:0010 1001 1.110=1010 011.11(可將整數(shù)高位的零省略,小數(shù)低位的零不寫)
2、十轉(zhuǎn)二? 方法一:整數(shù)除R取余法,小數(shù)乘E取整法:
如:14.875:整數(shù)部分除2取余,小數(shù)部分乘2取整
整數(shù) 14/2? 商7余0? 7/2 商3余1? 3/2 商1余1? 1/2? 余0? ? ? 除到商數(shù)零為止?
小數(shù) 875 * 2=1.750? 取1? . 075 * 2=1.50 取1? 0.5 * 2=1.0? 取1? 乘到所需要的精度或者積為零為止?
然后? :? 整數(shù)從高位(后面)寫,小數(shù)從低位(前面)寫。
14.875十進(jìn)制轉(zhuǎn)為二進(jìn)制等于? 1110.111
? 十轉(zhuǎn)二? 方法二:如? 46 :他最大只能分配 32位字節(jié),46-32=14,最大3
只能分配8個(gè)字節(jié),14-8=6,最大只能分配4個(gè)字節(jié),4-2=2。到此結(jié)束
它們分別是? 2^5? 2^3? 2^2 2^1? 然后分別在 第六位上填個(gè)1,第四位上填個(gè)1,第三位上填個(gè)1,第二位上填1? ,其他位均是零? :46 十轉(zhuǎn)二 101110
3、十六轉(zhuǎn)二:? 84.cf? 一分位為四,規(guī)則方法與八轉(zhuǎn)二相同,? 8=1000? 4=0100? 12=1100? 16=1111
合起來:1000 0100 0100.1100 1111

其他進(jìn)制轉(zhuǎn)八進(jìn)制
1、二轉(zhuǎn)八 : 規(guī)則:整數(shù)部分 從低位到高位,每三位為一組,最高位不足三位時(shí)高位補(bǔ)零,小數(shù)從低位到高位,每三位一組,最低位不足三位時(shí)低位補(bǔ)零。
1011 1100 011.11=001 011 110 011.110
? ? ? ? ? ? ? =1? 3? 6? 3 . 6
2、十進(jìn)轉(zhuǎn)八:(規(guī)則和十轉(zhuǎn)二一致)除R取余法,乘E取整法
25.35 :整數(shù)? 25/8? 商3? 余1? 3/8? 余3? 除到商數(shù)零為止
? ? ? 小數(shù)? 0.35
2、十進(jìn)轉(zhuǎn)八:(規(guī)則和十轉(zhuǎn)二一致)除R取余法,乘E取整法25.35 :整數(shù)? 25/8? 商3? 余1? 3/8? 余3? 除到商數(shù)零為止? ? ? ? ? ? 小數(shù)? 0.35 * 8=2.80? 取2? 0.8 * 8=6.4? 取6? 0.4 * 8=3.2 取3? 0.2 * 8=1.6 取1 乘到所需要的精度或者積為零為止。25.35十轉(zhuǎn)八31.2331
3、十六轉(zhuǎn)八? 一般的方法是先其他進(jìn)制做為媒介,先轉(zhuǎn)為其他進(jìn)制再?gòu)钠渌M(jìn)制轉(zhuǎn)為八進(jìn)制。
如 84.cf? 先轉(zhuǎn)為二進(jìn)制:8=1000? 4=0100 12=1100? 16=1111? 總:1000 0100.1100 1111
(按照二轉(zhuǎn)八規(guī)則)010 000 100.110 011 110= 204.636
其他進(jìn)制轉(zhuǎn)為十進(jìn)制
1、十六轉(zhuǎn)十(5F):5 * 16^1+15 * 16^0=? 95
2、八轉(zhuǎn)十? (123.4):1 * 8^2+2 * 8^1+3 * 8^0+4 * 8^-1= 83.5
3、二轉(zhuǎn)十? (1101.11):1 * 2^3+1* 2^2+0 * 2^1+1 * 2^0+1 * 2^ -1+1 * 2^-2=13.75
其他進(jìn)制轉(zhuǎn)為十六進(jìn)制
1、二轉(zhuǎn)十六,規(guī)則同二轉(zhuǎn)八一樣,只不過是四合一:
1010 1011 110.011=0101 0101 1110.0110=55E.6
2、八進(jìn)制轉(zhuǎn)十六進(jìn)制,只能是用其他進(jìn)制做為媒介,轉(zhuǎn)為其他進(jìn)之后再轉(zhuǎn)為十六進(jìn)制
3、十轉(zhuǎn)十六,方法一: 用其他進(jìn)制做媒介 先轉(zhuǎn)為其他進(jìn)制再轉(zhuǎn)為十六進(jìn)制。
方法二 :用整數(shù)除16取余法,小數(shù)用乘16取整法。
運(yùn)算符
優(yōu)先級(jí)運(yùn)算符含義說明結(jié)合方向

說明:同一優(yōu)先級(jí)時(shí),運(yùn)算方向按照結(jié)合方向決定。
自增(自減)i++與++i的不同
i++表示先使用i的值之后再+1
++i表示先+1
從上述表中可以大致歸納出各類運(yùn)算符的優(yōu)先級(jí):
初等運(yùn)算符(??)[??] ->? .
↓
單目運(yùn)算符
↓
算述運(yùn)算符(先乘除,后加減)
↓
關(guān)系運(yùn)算符
↓
邏輯運(yùn)算符(不包括!)
↓
條件運(yùn)算符
↓
逗號(hào)符

printf函數(shù):
format -- 是格式控制字符串,其中兩種類型的對(duì)象:普通字符和轉(zhuǎn)換說明(加%那種)? 。在輸出時(shí),普通字符將原樣不動(dòng)地復(fù)制到標(biāo)準(zhǔn)輸出,轉(zhuǎn)換說明并不直接輸出而是用于控制 printf 中參數(shù)的轉(zhuǎn)換和打印。每個(gè)轉(zhuǎn)換說明都由一個(gè)百分號(hào)字符(%)開始,以轉(zhuǎn)換說明結(jié)束,從而說明輸出數(shù)據(jù)的類型、寬度、精度等
函數(shù)原形: %[flags][width][.precision][length]specifier,即:%[標(biāo)志][最小寬度][.精度][類型長(zhǎng)度]說明符? ? (其中如果加轉(zhuǎn)換說明時(shí),%和 說明符(格式符)不能省略,其他均可)
函數(shù)表示在format的控制下,將其參數(shù)進(jìn)行格式化,然后再輸出打印出來。
如果函數(shù)執(zhí)行成功,則返回打印字符的數(shù)量,失敗則返回負(fù)數(shù)。
printf 函數(shù)的返回值為其輸出字符串常量的字符數(shù)(注意字符數(shù)與字?jǐn)?shù)的區(qū)別),注意計(jì)數(shù)針對(duì)所有的打印字符,包括空格和不可見的換行字符(不包括字符串的空字符)。
printf函數(shù)輸出方向是自右到左的。圖解:





scanf函數(shù)
標(biāo)準(zhǔn)輸入流stdin:它是從標(biāo)準(zhǔn)輸入設(shè)備(鍵盤)獲取數(shù)據(jù),程序中的變量通過流提取符從流中提取數(shù)據(jù),注意:只有在輸入完數(shù)據(jù)再按回車鍵后,該行數(shù)據(jù)才被送入鍵盤緩存區(qū)(sell),形成輸入流,提取運(yùn)算符才能從中提取數(shù)據(jù)。需要注意保證從流中讀取數(shù)據(jù)能正常運(yùn)行
scanf函數(shù)是從stdin中讀取內(nèi)存的子程序。并將數(shù)據(jù)保存在變量的地址中。
scanf函數(shù)返回成功讀入的數(shù)據(jù)項(xiàng)數(shù)。函數(shù)返回值為int型。
如果a和b都被成功讀入,那么scanf的返回值就是2;
如果只有a被成功讀入,返回值為1
如果a和b都未被成功讀入,返回值為0;
如果遇到錯(cuò)誤或遇到end of file,返回值為EOF。end of file為Ctrl+z 或者Ctrl+d。
函數(shù)原形: int scanf (const char * restrict format,...);(存儲(chǔ)順序由編譯器決定)
**注意:
(1)在高版本的 Visual Studio 編譯器中,scanf 被認(rèn)為是不安全的,被棄用,應(yīng)當(dāng)使用scanf_s代替 scanf。
(2) 對(duì)于字符串?dāng)?shù)組或字符串指針變量,由于數(shù)組名可以轉(zhuǎn)換為數(shù)組和指針變量名本身就是地址,因此使用scanf()函數(shù)時(shí),不需要在它們前面加上"&"操作符。
(3) 可以在格式化字符串中的"%"各格式化規(guī)定符之間加入一個(gè)整數(shù),表示任何讀操作中的最大位數(shù)。
(4) scanf函數(shù)中沒有類似printf的精度控制。如: scanf("%5.2f",&a); 是非法的。不能企圖用此語(yǔ)句輸入小數(shù)為2位的實(shí)數(shù)。
(5) scanf中要求給出變量地址,如給出變量名則會(huì)出錯(cuò)如 scanf("%d",a);是非法的,應(yīng)改為scanf("%d",&a);才是合法的。
(6) 在輸入多個(gè)數(shù)值數(shù)據(jù)時(shí),若格式控制串中沒有非格式字符作輸入數(shù)據(jù)之間的間隔,則可用空格,TAB或回車作間隔。C編譯在碰到空格,TAB,回車或非法數(shù)據(jù)(如對(duì)“%d”輸入“12A”時(shí),A即為非法數(shù)據(jù))時(shí)即認(rèn)為該數(shù)據(jù)結(jié)束。(7) 在輸入字符數(shù)據(jù)(%c)時(shí),若格式控制串中無非格式字符,則認(rèn)為所有輸入的字符均為有效字符。(scanf有一個(gè)明顯的優(yōu)點(diǎn),速度比cin函數(shù)快)
圖解:


作者:Mr_Li_
對(duì)啦對(duì)啦!另外的話為了幫助大家,輕松,高效學(xué)習(xí)C語(yǔ)言/C++,我給大家分享我收集的資源,從最零基礎(chǔ)開始的教程到C語(yǔ)言項(xiàng)目案例,幫助大家在學(xué)習(xí)C語(yǔ)言的道路上披荊斬棘!可以來我粉絲群領(lǐng)取哦~
微信公眾號(hào):C語(yǔ)言編程學(xué)習(xí)基地
整理分享(多年學(xué)習(xí)的源碼、項(xiàng)目實(shí)戰(zhàn)視頻、項(xiàng)目筆記,基礎(chǔ)入門教程)最重要的是你可以在群里面交流提問編程問題哦!
粉絲編程交流:

編程學(xué)習(xí)視頻分享:
