C語言 —— 愿此世如黃金般輝煌 - 進制轉換與操作符詳解

目錄

1.?操作符的分類

2. ?進制和進制轉換

2.1 2進制轉10進制

2.2 10進制轉2進制

2.3?2進制轉8進制

2.4?2進制轉16進制

3.?原碼、反碼、補碼

4.?移位操作符

4.1?左移操作符

4.2?右移操作符

5.?位操作符:&、|、^、~

5.1?& 按位與

?5.2?| ?按位或

5.3?^ ?按位異或

5.4?~ ?按位取反

6.?結構成員訪問操作符

?6.1 什么是結構體

6.2 結構體成員的直接訪問

6.3?結構體成員的間接訪問

7.?操作符的屬性:優先級與結合性

7.1?優先級

7.2?結合性


1.?操作符的分類

1. 算術操作符:+? ?-? ?*? ?/? ?%
2. 移位操作符:<<? ?>>
3. 位操作符:&? |? ^
4. 賦值操作符:=? +=? -=? =? /=? %=? <<=? >>=? &=? |=? ^=
5. 單目操作符:!? ++? –? &? *? +? ?-? ?~? ?sizeof? (類型)
6. 關系操作符:>? >=? <? <=? ==? !=
7. 邏輯操作符:&&? ||
8. 條件操作符:?:
9. 逗號表達式:,
10. 下標引用:[ ]
11. 函數調用:( )
12. 結構體成員訪問: .? ? ? ->

?


?

2. ?進制和進制轉換
?

其實我們經常能聽到2進制、8進制、10進制、16進制這樣的講法,那是什么意思呢?其實2進制、8進制、10進制、16進制是數值的不同表?形式?已

二進制:

??

2進制中滿2進1,2進制的數字每?位都是0~1的數字組成:
? ?

128? 64? 32? 16? 8? 4? 2? 1

??

十進制12的二進制就是1100,也就是取上面8 4 2 1的前兩位

2.1 2進制轉10進制

10進制中的123,從右到左依次是個位,十位,百位,每一位都有自己的權重,每一位各自乘以各自的權重然后加和就是表示的值

2進制轉換10進制的12也相同

2.2 10進制轉2進制

2.3?2進制轉8進制

8進制的數字每?位是0~7的,0~7的數字,各?寫成2進制,最多有3個2進制位就?夠了,?如7的?進制是111,所以在2進制轉8進制數的時候,從2進制序列中右邊低位開始向左每3個2進制位會換算?個8進制位,剩余不夠3個2進制位的直接換算

如:2進制的01101011,換成8進制:0153,0開頭的數字,會被當做8進制

2.4?2進制轉16進制

16進制的數字每?位是0~9,a ~f 的,0~9,a ~f的數字,各?寫成2進制,最多有4個2進制位就?夠了,?如 f 的?進制是1111,所以在2進制轉16進制數的時候,從2進制序列中右邊低位開始向左每4個2進制位會換算?個16進制位,剩余不夠4個?進制位的直接換算

在16進制中,兩位數用字母表示(大小寫都可以)

??

10 = A/a????????11 = B/b????????12 = C/c????????13 = D/d????????14 = E/e????????15 = F/f

如:2進制的01101011,換成16進制:0x6b,16進制表?的時候前?加0x


3.?原碼、反碼、補碼

整數的2進制表示方法有三種,即原碼、反碼和補碼

? ?
有符號整數的三種表示方法均有符號位和數值位兩部分,2進制序列中,最?位的1位是被當做符號位,剩余的都是數值位

? ?
符號位都是?0表?“正”,?1表?“負”

正整數的原、反、補碼都相同

負整數的三種表示方法各不相同

? ?
原碼:直接將數值按照正負數的形式翻譯成?進制得到的就是原碼
反碼:將原碼的符號位不變,其他位依次按位取反就可以得到反碼
補碼:反碼+1就得到補碼

? ??
反碼得到原碼也是可以使用:取反,+1的操作

??

數據存放內存中其實存放的是補碼


4.?移位操作符

移位操作符的操作數只能是整數,移動操作符移動的是二進制位

4.1?左移操作符

?移位規則:左邊拋棄、右邊補0,左移的效果和乘2類似

#include <stdio.h>int main()
{int num = 10;int n = num << 1;printf("n= %d\n", n);printf("num= %d\n", num);return 0;
}


4.2?右移操作符

與左移操作符的效果相反,右移的效果和除2類似

? ?

移位規則:右移運算分兩種:

? ?
1. 邏輯右移:左邊?0填充,右邊丟棄

? ?

? ?
2. 算術右移:左邊用原該值的符號位填充,右邊丟棄

? ?

??

? ??

? ?

#include <stdio.h>int main()
{int num = 10;int n = num >> 1;printf("n= %d\n", n);printf("num= %d\n", num);return 0;
}

? ?

對于移位運算符,不要移動負數位,這個是標準未定義的

? ?

例如:

? ?

int num = 10;
num>>-1;

?


5.?位操作符:&、|、^、~

&    //按位與
|    //按位或
^    //按位異或
~    //按位取反

位操作符的操作數必須是整數

5.1?& 按位與

當兩個對應的二進制位都為 1 時,結果位才為 1,否則為 0,也就是同1為1,不1為0

0000000000 0000000000 0000000001 11 a
0000000000 0000000000 0000011000 11 b0000000000 0000000000 0000000000 11 a & b

?5.2?| ?按位或

當兩個對應的二進制位中只要有一個為 1,結果位就為 1,當兩個位都為 0 時,結果位才為 0

??

也就是有1為1,無1為0

0000000000 0000000000 0000000001 01 a
0000000000 0000000000 0000000000 11 b0000000000 0000000000 0000000001 11 a | b

5.3?^ ?按位異或

當兩個對應的二進制位不同(一個為 0,另一個為 1)時,結果位為 1,當兩個位相同(都為 0 或都為 1)時,結果位為 0

? ?

也就是不同為1,相同為0

0000000000 0000000000 0000000001 01 a
0000000000 0000000000 0000000000 11 b0000000000 0000000000 0000000001 10 a ^ b

5.4?~ ?按位取反

顧名思義,將每個二進制位中的 0 變為 1,1 變為 0

0000000000 0000000000 0000000001 01 a1111 1111 11 1111 1111 11 1111 1111 10 10 ~a


6.?結構成員訪問操作符

? ?

?6.1 什么是結構體

結構是?些值的集合,這些值稱為成員變量。結構的每個成員可以是不同類型的變量,如:
標量、數組、指針,甚?是其他結構體

結構體的語法結構:

struct tag
{member - list;}variable - list;

描述?個學生:

struct Stu{char name[20];//名字int age;//年齡 char sex[5];//性別char id[20];//學號 }; //分號不能丟

結構體的定義:

struct Point{int x;int y;}p1;        //聲明類型的同時定義變量p1        
struct Point p2;    //定義結構體變量p2 

結構體的指定順序初始化:

//指定順序初始化
struct Point p3 = { 10, 20 };
struct Stu        //類型聲明
{char name[15];//名字int age;//年齡
};
struct Stu s1 = { "zhangsan", 20 };//初始化
struct Stu s2 = { .age = 20, .name = "lisi" };//指定順序初始化

結構體嵌套初始化:

struct Node
{int data;struct Point p;struct Node* next;}n1 = { 10, {4,5}, NULL };//結構體嵌套初始化
struct Node n2 = { 20, {5, 6}, NULL };//結構體嵌套初始化


6.2 結構體成員的直接訪問
?

結構體成員的直接訪問是通過點操作符(.)訪問的,點操作符接受兩個操作數

??

語法結構:結構體變量.成員名

#include <stdio.h>struct Point
{int x;int y;
}p = { 1,2 };int main()
{printf("x: %d y: %d\n", p.x, p.y);return 0;
}

?

6.3?結構體成員的間接訪問

有時候我們得到的不是?個結構體變量,?是得到了?個指向結構體的指針

??

語法結構:結構體指針->成員名

#include <stdio.h>
struct Point
{int x;int y;
};int main()
{struct Point p = { 3, 4 };struct Point* ptr = &p;ptr->x = 10;ptr->y = 20;printf("x = %d y = %d\n", ptr->x, ptr->y);return 0;
}


7.?操作符的屬性:優先級與結合性

優先級與結合性決定了表達式求值的計算順序

7.1?優先級

優先級指的是,如果?個表達式包含多個運算符,哪個運算符應該優先執?,各種運算符的優先級是不?樣的

??

舉個例子:1 3 + 4 * 5;

??

上??例中,表達式 3 + 4 * 5 ??既有加法運算符( + ),?有乘法運算符( * )。由于乘法的優先級?于加法,所以會先計算 4 * 5 ,?不是先計算 3 + 4?

7.2?結合性

如果兩個運算符優先級相同,優先級沒辦法確定先計算哪個了,這時候就看結合性了,則根據運算符是左結合,還是右結合,決定執?順序

? ??

?部分運算符是左結合(從左到右執?),少數運算符是右結合(從右到左執?),?如賦值運算符( = )

一般來說:!>?算術運算符?> 關系運算符 > 邏輯運算(&& > ||) > 賦值運算符?

優先級鏈接:

??

C 運算符優先級 - cppreference.comhttps://zh.cppreference.com/w/c/language/operator_precedence?


如寶石般璀璨

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/72751.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/72751.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/72751.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

docker1

前言 技術架構 單機架構 應用數據分離架構 應用服務集群架構 讀寫分離/主從分離架構 寫入主的時候&#xff0c;要同步Mysql從的數據才可以 冷熱分離架構 寫的時候要寫入主和緩存數據庫 讀的時候先去緩存看有沒有&#xff0c;沒有的話就去從數據庫讀數據 主要就是看這個數據是…

Spring Boot整合ArangoDB教程

精心整理了最新的面試資料和簡歷模板&#xff0c;有需要的可以自行獲取 點擊前往百度網盤獲取 點擊前往夸克網盤獲取 一、環境準備 JDK 17Maven 3.8Spring Boot 3.2ArangoDB 3.11&#xff08;本地安裝或Docker運行&#xff09; Docker啟動ArangoDB docker run -d --name ar…

從離散迭代到連續 常微分方程(Ordinary Differential Equation, ODE):梯度流

從離散迭代到連續 ODE&#xff1a;梯度下降與梯度流的奇妙聯系 在機器學習和優化領域&#xff0c;我們常常使用離散的迭代算法&#xff08;如梯度下降&#xff09;來求解目標函數的最優解。然而&#xff0c;你是否想過這些離散步驟背后可能隱藏著連續的動態&#xff1f;常微分…

常見的 Git 命令

基礎配置和信息查詢 (Setup and Information) git config --global user.name “Your Name”: 配置全局用戶名&#xff0c;用于 Git 提交記錄。 git config --global user.email “your.emailexample.com”: 配置全局用戶郵箱&#xff0c;同樣用于 Git 提交記錄。 git confi…

深度解析:視頻軟編碼與硬編碼的優劣對比

視頻編碼 一、基本原理與核心技術 壓縮原理 通過時空冗余消除實現數據壓縮&#xff1a; 空間冗余&#xff1a;利用幀內預測&#xff08;如DC/角度預測&#xff09;消除單幀內相鄰像素相似性。時間冗余&#xff1a;運動估計與補償技術&#xff08;ME/MC&#xff09;減少連續幀間…

藍耘智算 + 通義萬相 2.1:為 AIGC 裝上 “智能翅膀”,翱翔創作新天空

1. 引言&#xff1a;AIGC 的崛起與挑戰 在過去幾年中&#xff0c;人工智能生成內容&#xff08;AIGC&#xff09;技術突飛猛進。AIGC 涉及了文本生成、圖像創作、音樂創作、視頻制作等多個領域&#xff0c;并逐漸滲透到日常生活的方方面面。傳統的內容創作方式已經被許多人類創…

行為模式---中介者模式

概念 中介者模式是一種行為模式&#xff0c; 他的核心思想是通過引入一個中介者對象&#xff0c;將多個對象之間的復雜交互邏輯統一管理。每個對象只需要與中介者通信&#xff0c;而不需要直接與其他對象交互&#xff0c;從而降低系統的耦合度。 適用場景 對象之間交互復雜&…

百度移動生態事業群聚焦UGC戰略,貼吧迎新調整

易采游戲網3月8日獨家消息&#xff1a;近日據內部消息人士透露&#xff0c;百度移動生態事業群正積極將用戶生成內容&#xff08;UGC&#xff09;作為新的戰略重點。此舉標志著百度對UGC價值的重視與重塑&#xff0c;同時也預示著其旗下重要平臺——百度貼吧將迎來一輪重大的調…

C#模擬鼠標點擊,模擬鼠標雙擊,模擬鼠標恒定速度移動,可以看到軌跡

C#模擬鼠標點擊&#xff0c;模擬鼠標雙擊&#xff0c;模擬鼠標恒定速度移動&#xff0c;可以看到軌跡 using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks;namespa…

QGIS提取全國景區經緯度的完整流程

一、數據獲取與預處理 數據來源選擇 全國A級景區數據可從各省文化和旅游廳官網、國家文化和旅游部網站或第三方GIS數據平臺獲取。推薦使用2020-2021年更新的矢量數據&#xff08;shp格式&#xff09;或Excel表格&#xff0c;其中包含景區名稱、地址、等級及WGS84經緯度信息。例…

如何進行postgreSQL專家認證

進行 PostgreSQL 專家認證主要有信創 PostgreSQL 認證和中國 PostgreSQL 考試認證等方式&#xff0c;以下以信創 PostgreSQL 認證為例介紹具體步驟&#xff1a; 了解認證體系 信創 PostgreSQL 認證由工信部人才交流中心組織及頒發證書&#xff0c;包括以下三個級別&#xff1a;…

【前端】【webpack-dev-server】proxy跨域代理

參考&#xff1a;https://www.bilibili.com/video/BV1c5SnYZEnZ?spm_id_from333.788.videopod.episodes&vd_source65c8707649747fd67b232866b69a5ebd&p138

批量在 Word 的指定位置插入頁,如插入封面、末尾插入頁面

我們經常會碰到需要在 Word 文檔中插入新的頁面的需求&#xff0c;比如在 Word 文檔末尾插入一個廣告頁、給 Word 文檔插入一個說明封面&#xff0c;在 Word 文檔的中間位置插入新的頁面等等。相信這個操作對于大部分小伙伴來說都不難&#xff0c;難的是同時給多個 Word 文檔插…

在Windows 11的WSL中安裝Kali Linux

Kali Linux 是網絡安全從業者和愛好者的首選工具集&#xff0c;但直接在物理機或虛擬機上運行可能占用較多資源。借助 Windows Subsystem for Linux (WSL)&#xff0c;我們可以在Windows 11中原生運行Kali Linux&#xff0c;輕量且高效。本教程將手把手教你如何在WSL2中安裝并配…

Flow Size Prediction with Short Time Gaps

Flow Size Prediction with Short Time Gaps 網絡流量預測新突破&#xff1a;微秒級短流預測的可行性分析 在當今數據中心和云計算環境中&#xff0c;網絡流量的精準預測是優化資源分配、實現智能負載均衡的關鍵。傳統流量和預測聚焦于長時間間隔&#xff08;如秒級或分鐘級&…

pandas——to_datatime用法

Pandas中pd.to_datetime的用法及示例 pd.to_datetime 是 Pandas 庫中用于將字符串、整數或列表轉換為日期時間&#xff08;datetime&#xff09;對象的核心函數。它在處理時間序列數據時至關重要&#xff0c;能夠靈活解析多種日期格式并統一為標準時間類型。以下是其核心用法及…

數學建模:MATLAB強化學習

一、強化學習簡述 強化學習是一種通過與環境交互&#xff0c;學習狀態到行為的映射關系&#xff0c;以獲得最大積累期望回報的方法。包含環境&#xff0c;動作和獎勵三部分&#xff0c;本質是智能體通過與環境的交互&#xff0c;使得其作出的動作所得到的決策得到的總的獎勵達…

【leetcode hot 100 160】相交鏈表

解法一&#xff1a;&#xff08;哈希集合&#xff09;利用HashSet保存一個鏈表的值&#xff0c;循環另一個列表&#xff0c;在HashSet中尋找該值。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x…

19. 大數據-技術生態簡介

文章目錄 前言一、Hadoop介紹1. 簡介2. Hadoop發展史3. Hadoop現狀 二、Hadoop特性1. Hadoop國外應用2. Hadoop國內應用 三、Hadoop架構變遷1. 發行版本2. Hadoop架構變遷(1.0-2.0變遷)3. Hadoop架構變遷(3.0新版本)4. 綜述 四、技術生態體系 前言 大數據&#xff08;Big Data…

DeepSeek 助力 Vue3 開發:打造絲滑的表格(Table)示例3: 行選擇

前言&#xff1a;哈嘍&#xff0c;大家好&#xff0c;今天給大家分享一篇文章&#xff01;并提供具體代碼幫助大家深入理解&#xff0c;徹底掌握&#xff01;創作不易&#xff0c;如果能幫助到大家或者給大家一些靈感和啟發&#xff0c;歡迎收藏關注哦 &#x1f495; 目錄 Deep…