C語(yǔ)言基礎(chǔ)操作之操作符、進(jìn)制與數(shù)據(jù)表示通俗講解
操作符詳解:從基礎(chǔ)到實(shí)用
位操作符:二進(jìn)制層面的魔法
位操作符是直接對(duì)數(shù)字二進(jìn)制位進(jìn)行操作的工具,在底層編程中非常實(shí)用:
- 按位與(&):兩個(gè)位都為1時(shí)結(jié)果為1,可用于"清零"特定位。
int a = 0b1010; // 10 int b = 0b1100; // 12 printf("%d", a & b); // 輸出8(0b1000,保留共同為1的位)
- 按位或(|):至少一個(gè)位為1時(shí)結(jié)果為1,可用于"設(shè)置"特定位。
printf("%d", a | b); // 輸出14(0b1110,合并所有1的位)
- 按位異或(^):位不同時(shí)結(jié)果為1,可用于"翻轉(zhuǎn)"特定位。
printf("%d", a ^ b); // 輸出6(0b0110,不同的位保留1)
- 左移(<<) 和 右移(>>):將二進(jìn)制位整體移動(dòng),相當(dāng)于快速乘除2的冪。
printf("%d", 8 << 1); // 16(左移1位=×2) printf("%d", 16 >> 2); // 4(右移2位=÷4)
賦值操作符的進(jìn)階用法
除了基本的=
,復(fù)合賦值操作符能讓代碼更簡(jiǎn)潔:
int x = 10; x += 5; // 等價(jià)于 x = x + 5 → x=15 x *= 3; // 等價(jià)于 x = x * 3 → x=45 x &= 0b111; // 等價(jià)于 x = x & 0b111 → 保留低3位
三元運(yùn)算符的巧妙應(yīng)用
條件操作符?:
可以簡(jiǎn)化簡(jiǎn)單的if-else判斷:
int score = 75; // 格式:條件 ? 滿足時(shí)的值 : 不滿足時(shí)的值 char* result = (score >= 60) ? "及格" : "不及格"; printf("%s", result); // 輸出"及格"
進(jìn)制轉(zhuǎn)換:程序員的"語(yǔ)言切換"
多進(jìn)制輸出技巧
在printf中用特定格式符可直接輸出不同進(jìn)制:
int num = 255; printf("十進(jìn)制:%d\n", num); // 255 printf("八進(jìn)制:%o\n", num); // 377(前綴0可省略) printf("十六進(jìn)制:%x\n", num); // ff(小寫) printf("十六進(jìn)制:%X\n", num); // FF(大寫)
十六進(jìn)制的實(shí)用價(jià)值
十六進(jìn)制因與二進(jìn)制轉(zhuǎn)換方便(1位16進(jìn)制=4位二進(jìn)制),常用于表示內(nèi)存地址或顏色值:
int color = 0xFF0088; // 紅色(FF)、綠色(00)、藍(lán)色(88)的混合色
原碼、反碼、補(bǔ)碼:計(jì)算機(jī)的"負(fù)數(shù)思維"
為什么需要補(bǔ)碼?
- 原碼:直接表示正負(fù),但計(jì)算時(shí)會(huì)出現(xiàn)
0
和-0
兩種表示 - 反碼:解決了部分問(wèn)題,但仍有正負(fù)零問(wèn)題
- 補(bǔ)碼:徹底解決正負(fù)零問(wèn)題,且能讓加減法用同一套電路實(shí)現(xiàn)
補(bǔ)碼計(jì)算實(shí)例
以8位整數(shù)為例,計(jì)算3 + (-2)
:
- 3的補(bǔ)碼:
00000011
- -2的補(bǔ)碼:
11111110
(原碼10000010→反碼11111101→加1得補(bǔ)碼) - 相加結(jié)果:
00000011 + 11111110 = 100000001
- 去掉最高位溢出,得
00000001
(即1),計(jì)算正確!
位操作與補(bǔ)碼的配合
利用補(bǔ)碼特性可以簡(jiǎn)化操作,比如取相反數(shù):
int a = 5; int b = ~a + 1; // 等價(jià)于 -a(補(bǔ)碼的取反加1就是相反數(shù)) printf("%d", b); // 輸出-5
通過(guò)這些基礎(chǔ)概念的理解,能幫你更深入掌握C語(yǔ)言的底層邏輯,為后續(xù)學(xué)習(xí)指針、內(nèi)存操作打下基礎(chǔ)。
總結(jié)
到此這篇關(guān)于C語(yǔ)言基礎(chǔ)操作之操作符、進(jìn)制與數(shù)據(jù)表示通俗講解的文章就介紹到這了,更多相關(guān)C語(yǔ)言操作符、進(jìn)制與數(shù)據(jù)表示內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++如何過(guò)濾出字符串的中文(GBK、UTF-8)
這篇文章主要給大家介紹了關(guān)于C++如何過(guò)濾出字符串的中文的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07c語(yǔ)言string.h頭文件中所有函數(shù)示例詳解
這篇文章詳細(xì)介紹了C語(yǔ)言標(biāo)準(zhǔn)庫(kù)中的字符串和內(nèi)存操作函數(shù),以str開(kāi)頭的字符串處理函數(shù)和以mem開(kāi)頭的內(nèi)存處理函數(shù),每種函數(shù)都有詳細(xì)的原型、功能描述和示例代碼,需要的朋友可以參考下2024-11-11C語(yǔ)言實(shí)現(xiàn)用戶態(tài)線程庫(kù)案例
下面小編就為大家?guī)?lái)一篇C語(yǔ)言實(shí)現(xiàn)用戶態(tài)線程庫(kù)案例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05C++中sprintf使用的方法與printf的區(qū)別分析
這篇文章主要介紹了C++中sprintf使用的方法與printf的區(qū)別,實(shí)例分析了sprintf與printf的具體用法及相關(guān)注意事項(xiàng),具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-01-01C++的try塊與異常處理及調(diào)試技術(shù)實(shí)例解析
這篇文章主要介紹了C++的try塊與異常處理及調(diào)試技術(shù)實(shí)例解析,有助于讀者加深對(duì)try塊調(diào)試技術(shù)的認(rèn)識(shí),需要的朋友可以參考下2014-07-07C語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的掃雷游戲
掃雷是電腦上很經(jīng)典的游戲,特意去網(wǎng)上玩了一會(huì),幾次調(diào)試之后,發(fā)現(xiàn)這個(gè)比三子棋要復(fù)雜一些,尤其是空白展開(kāi)算法上和堵截玩家有的一拼,與實(shí)際游戲差別較大,不能使用光標(biāo),下面來(lái)詳解每一步分析2021-10-10C語(yǔ)言詳解分析進(jìn)程控制中進(jìn)程終止的實(shí)現(xiàn)
當(dāng)進(jìn)程完成執(zhí)行最后語(yǔ)句并且通過(guò)系統(tǒng)調(diào)用 exit() 請(qǐng)求操作系統(tǒng)刪除自身時(shí),進(jìn)程終止。這時(shí),進(jìn)程可以返回狀態(tài)值(通常為整數(shù))到父進(jìn)程(通過(guò)系統(tǒng)調(diào)用 wait())。所有進(jìn)程資源,如物理和虛擬內(nèi)存、打開(kāi)文件和 I/O 緩沖區(qū)等,會(huì)由操作系統(tǒng)釋放2022-08-08