C語言 -- 操作符詳解?

C語言 -- 操作符詳解?

  • 1. 操作符的分類
  • 2. 二進制和進制轉換?
  • 2.1 2進制轉10進制?
      • 2.1.1 10進制轉2進制數字?
    • 2.2 2進制轉8進制和16進制?
      • 2.2.1 2進制轉8進制?
      • 2.2.2 2進制轉16進制?
  • 3. 原碼、反碼、補碼?
  • 4. 移位操作符?
    • 4.1 左移操作符?
  • 4.2 右移操作符?
  • 5. 位操作符:&、|、^、~?
  • 6. 單目操作符
  • 7. 逗號表達式?
  • 8. 下標訪問[]、函數調用()?
    • 8.1 [ ] 下標引用操作符?
    • 8.2 函數調用操作符 ?
  • 9. 結構成員訪問操作符?
    • 9.1 結構體?
      • 9.1.1 結構的聲明?
      • 9.1.2 結構體變量的定義和初始化?
    • 9.2 結構成員訪問操作符?
      • 9.2.1 結構體成員的直接訪問
      • 9.2.2 結構體成員的間接訪問

1. 操作符的分類

? 算術操作符: + 、- 、* 、/ 、%
? 移位操作符: << >> ?
? 位操作符: & | ^ `?
? 賦值操作符: = 、+= 、 -= 、 * = 、 /= 、%= 、<<= 、>>= 、&= 、|= 、^= ?
? 單目操作符: !、++、–、&、*、+、-、~ 、sizeof、(類型)
? 關系操作符: > 、>= 、< 、<= 、 == 、 != ?
? 邏輯操作符: && 、||
? 條件操作符: ? :
? 逗號表達式: ,
? 下標引用: []
? 函數調用: ()
? 結構成員訪問: . 、->
上述的操作符,我們已經講過算術操作符、賦值操作符、邏輯操作符、條件操作符和部分的單目操作符,今天繼續介紹一部分,操作符中有一些操作符和二進制有關系,我們先鋪墊一下二進制的和進制轉換的知識。

2. 二進制和進制轉換?

其實我們經常能聽到2進制、8進制、10進制、16進制這樣的講法,那是什么意思呢?其實2進制、8進制、10進制、16進制是數值的不同表示形式而已。?
比如:數值15的各種進制的表示形式:?
在這里插入圖片描述
我們重點介紹一下二進制:
首先我們還是得從10進制講起,其實10進制是我們生活中經常使用的,我們已經形成了很多嘗試:?
? 10進制中滿10進1?
? 10進制的數字每一位都是0~9的數字組成?
其實二進制也是一樣的
? 2進制中滿2進1?
? 2進制的數字每一位都是0~1的數字組成?
那么 1101 就是二進制的數字了。

2.1 2進制轉10進制?

其實10進制的123表示的值是一百二十三,為什么是這個值呢?其實10進制的每一位是權重的,10進制的數字從右向左是個位、十位、百位…,分別每一位的權重是?10的零次方 , 10的一次方 , 10的二次方 … ?
如下圖:
在這里插入圖片描述
2進制和10進制是類似的,如果是2進制的1101,該怎么理解呢??
如下圖:
在這里插入圖片描述

2.1.1 10進制轉2進制數字?

在這里插入圖片描述

2.2 2進制轉8進制和16進制?

我們需要先了解一下:
在這里插入圖片描述

2.2.1 2進制轉8進制?

進制的數字每一位是0 ~ 7的,0 ~ 7的數字,各自寫成2進制,最多有3個2進制位就足夠了,比如7的二進制是111,所以在2進制轉8進制數的時候,從2進制序列中右邊低位開始向左每3個2進制位會換算一個8進制位,剩余不夠3個2進制位的直接換算。?
在這里插入圖片描述
下面是一個八進制的數字就%d打印出來:
在這里插入圖片描述

2.2.2 2進制轉16進制?

16進制的數字每一位是0 ~ 9,a ~ f 的,0~9,a ~ f的數字,各自寫成2進制,最多有4個2進制位就足夠了,比如 f 的二進制是1111,所以在2進制轉16進制數的時候,從2進制序列中右邊低位開始向左每4個2進制位會換算一個16進制位,剩余不夠4個二進制位的直接換算。?
在這里插入圖片描述

3. 原碼、反碼、補碼?

  • 整數的2進制表示方法有三種,即原碼、反碼和補碼?
  • 有符號整數的三種表示方法均有符號位數值位兩部分,2進制序列中,最高位的1位是被當做符號位,剩余的都是數值位。
  • 符號位都是用0表示“正”,用1表示“負”。?
  • 正整數的原、反、補碼都相同。
  • 負整數的三種表示方法各不相同。

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

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

例子1:
在這里插入圖片描述

例子2:
在這里插入圖片描述

對于整形來說:數據存放內存中其實存放的是補碼。
為什么呢?
在這里插入圖片描述
下面舉個例子:
在這里插入圖片描述
注意:
在這里插入圖片描述

4. 移位操作符?

在這里插入圖片描述

4.1 左移操作符?

移位規則:左邊拋棄、右邊補0?
例子如下:
在這里插入圖片描述
圖示:
在這里插入圖片描述

4.2 右移操作符?

移位規則:首先右移運算分兩種:
在這里插入圖片描述
例子如下:
在這里插入圖片描述
以%d形式打印的是原碼
圖示:邏輯右移演示
在這里插入圖片描述
算數右移演示:
在這里插入圖片描述
:右移到底是算數右移還是邏輯右移取決于編譯器的實現,大部分的編譯器上是算數右移,在VS2022上采用的算數右移。
警告??:對于移位運算符,不要移動負數位,這個是標準未定義的。
例如:
在這里插入圖片描述

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

位操作符有:

&------ >按位與?
| -------->按位或
^ ------->按位異或?
~ ------>按位取反

:他們的操作數必須是整數,操作的都是二進制位。

按位與計算規則:

對應的二進制位進行與運算,只要有0就是0,兩個同時為1才是1

例子:
在這里插入圖片描述
按位或計算規則

對應的二進制位進行或運算,只要有1就是1,兩個同時為0才是0

例子:
在這里插入圖片描述
按位異或計算規則

對應的二進制位進行異或運算,相同為0,相異為1

例子:
在這里插入圖片描述
按位取反 ~
例子:
在這里插入圖片描述
一道變態的面試題:
不能創建臨時變量(第三個變量),實現兩個數的交換。
在這里插入圖片描述
異或操作符的特點:

a^a = 0
0^a = a

練習1編寫代碼實現:求一個整數存儲在內存中的二進制中1的個數。?
方法一:
在這里插入圖片描述
方法二:
在這里插入圖片描述
方法三:
首先的先明白一個知識:

// n = n & (n - 1)
效果:把n的二進制中最右邊的1去掉了
//n=15
//1111 - n
//1110 - n-1
//1110 - n
//1101 - n-1
//1100 - n
//1011 - n-1
//1000 - n
//0111 - n-1
//0000 - n

代碼例子:
在這里插入圖片描述
練習2:判斷一個數n是否是2的次方數
特點:

//000001
//000010
//000100
//001000
//…

代碼:
在這里插入圖片描述
練習2:二進制位置0或者置1?
編寫代碼將13二進制序列的第5位修改為1,然后再改回0?
在這里插入圖片描述
在這里插入圖片描述

6. 單目操作符

在這里插入圖片描述

7. 逗號表達式?

在這里插入圖片描述
逗號表達式,就是用逗號隔開的多個表達式。
逗號表達式,從左向右依次執行。整個表達式的結果是最后一個表達式的結果。
例子:
在這里插入圖片描述

8. 下標訪問[]、函數調用()?

8.1 [ ] 下標引用操作符?

操作數:一個數組名 + 一個索引值 ?
在這里插入圖片描述

8.2 函數調用操作符 ?

接受一個或者多個操作數:第一個操作數是函數名,剩余的操作數就是傳遞給函數的參數。
例子:
在這里插入圖片描述
注意:sizeof是操作符,不是函數
在這里插入圖片描述

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

9.1 結構體?

C語言已經提供了內置類型,如:char、short、int、long、float、double等,但是只有這些內置類型還是不夠的,假設我想描述學生,描述一本書,這時單一的內置類型是不行的。描述一個學生需要名字、年齡、學號、身高、體重等;描述一本書需要作者、出版社、定價等。C語言為了解決這個問題,增加了結構體這種自定義的數據類型,讓程序員可以自己創造適合的類型。
在這里插入圖片描述

9.1.1 結構的聲明?

聲明結構體類型的時候,再創建一個變量
struct tag
{
member-list; //成員列表,一個或多個成員
}variable-list;

  • struct 是結構體類型的關鍵字
  • tag 結構體名稱/標簽
  • struct tag 是用戶定義的結構體類型
  • member-list 結構體成員名
  • variable-list 是定義的結構體類型變量

描述一個學生
在這里插入圖片描述

9.1.2 結構體變量的定義和初始化?

1.變量的定義
在這里插入圖片描述
2.結構體對象初始化
在這里插入圖片描述
3.結構體嵌套結構體
在這里插入圖片描述

9.2 結構成員訪問操作符?

9.2.1 結構體成員的直接訪問

結構體成員的直接訪問是通過點操作符(.)訪問的。點操作符接受兩個操作數
使用方式:結構體變量.成員名

如下所示:
例子1:?
在這里插入圖片描述
例子2:

在這里插入圖片描述

9.2.2 結構體成員的間接訪問

有時候我們得到的不是一個結構體變量,而是得到了一個指向結構體的指針。
使用方式:結構體指針->成員名?

如下所示:
在這里插入圖片描述

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

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

相關文章

Symfony實戰手冊:PHP框架的高級應用技巧

引言 Symfony是一個功能強大且廣泛應用于PHP應用程序開發的框架&#xff0c;它提供了許多高級特性和工具&#xff0c;可以幫助開發人員更高效地構建和管理復雜的Web應用程序。以下是Symfony框架的幾個關鍵方面及其高級應用技巧&#xff1a; 1. 路由和控制器 Symfony的路由組…

suricata7 rule格式

suricata 7.0.5 suricata rule由三部分組成&#xff0c; action, header, options action,決定當前規則匹配上后需要執行的動作header,定義當前規則的協議&#xff0c;IP地址&#xff0c;端口&#xff0c;方向options,定義了具體的規則 一、 action 合法的action值有&#x…

Linux_共享內存通信

目錄 1、共享內存原理 2、申請共享內存 2.1 ftok 2.2 測試shmget、ftok 2.3 查看系統下的共享內存 3、關聯共享內存 3.1 測試shmat 4、釋放共享內存 4.1 測試shmctl 5、實現共享內存通信 6、共享內存的特性 結語 前言&#xff1a; 在Linux下&#xff0c;有一…

爆!Java高級特性之Stream API詳解

爆&#xff01;Java高級特性之Stream API詳解 Java 8引入的Stream API可以說是一個革命性的特性,讓我們告別了又臭又長的for循環,迎來了函數式編程的春天。今天就讓我們來一起深入了解這個讓人又愛又恨的Stream API吧! 什么是Stream? Stream就像一個高級的迭代器,允許我們以…

分支與循環

目錄 1. if語句 1&#xff09;if 2) else 3&#xff09;分支中包含多條語句 4&#xff09;if嵌套 2.關系操作符 3.條件操作符 4.邏輯操作符&#xff1a;&& || ! 1) 邏輯取反運算符 !?編輯 2 與運算符?編輯 3) 或運算符?編輯 4) 閏年的判斷 5) 短路 …

LangChain 概述 (模塊索引)

文章目錄 一、下載二、核心功能1、流式傳輸 streaming 三、LCEL四、組成部分1、Promp template2、Example selectors (示例選擇器)3、Chat models (聊天模型)4、Messages (消息)5、LLMs (大語言模型) 一、下載 二、核心功能 其中包括以下內容&#xff1a; 從模型中返回結構化的…

若依 Vue 前端分離 3.8.8 版中生成的前端代碼中關于下拉框只有下拉箭頭的問題

生成代碼修改前 <el-form-item label"課程學科" prop"subject"><el-select v-model"queryParams.subject" placeholder"請選擇課程學科" clearable><el-optionv-for"dict in course_subject":key"dict…

Mysql中常用函數的使用示例

場景 基礎知識回顧&#xff1a;mysql中常用函數的使用示例。 注&#xff1a; 博客&#xff1a;霸道流氓氣質-CSDN博客 實現 數學函數 -- ABS(x)返回x的絕對值 SELECT ABS(-1),ABS(2); -- PI()返回圓周率 SELECT PI(); -- SQRT(x)返回非負數x的二次方根 SELECT SQRT(4); -…

【博士每天一篇文獻-算法】Adult neurogenesis acts as a neural regularizer

閱讀時間&#xff1a;2023-12-20 1 介紹 年份&#xff1a;2022 作者&#xff1a;Lina M. Tran&#xff0c;Adam Santoro&#xff0c;谷歌DeepMind 期刊&#xff1a; Proceedings of the National Academy of Sciences 引用量&#xff1a;13 代碼&#xff1a;https://github.c…

A4-C四驅高防輪式巡檢機器人

在當今數字化和智能化迅速發展的時代&#xff0c;旗晟智能帶來了一款革命性的創新產品——A4-C四驅高防輪式巡檢機器人。這款機器人以其卓越的性能和多功能性&#xff0c;為工業巡檢領域帶來了全新的解決方案。 一、產品亮點 1、四驅動力與高防護設計 四驅高防輪式巡檢機器人…

ASUS/華碩槍神4 G532L G732L系列 原廠win10系統 工廠文件 帶F12 ASUS Recovery恢復

華碩工廠文件恢復系統 &#xff0c;安裝結束后帶隱藏分區&#xff0c;一鍵恢復&#xff0c;以及機器所有驅動軟件。 系統版本&#xff1a;Windows10 原廠系統下載網址&#xff1a;http://www.bioxt.cn 需準備一個20G以上u盤進行恢復 請注意&#xff1a;僅支持以上型號專用…

GPT-2怎么做翻譯任務?

首先需要知道的是GPT-2無論在訓練還是推理過程都是只使用了transformer decoder&#xff0c;并沒有使用encoder結構&#xff0c;那么它是怎么做的翻譯任務呢&#xff1f; 使用transformer encoderdecoder的著名架構有&#xff1a; 最原始的transformer model&#xff08;Atte…

計算機應用數學--第一次作業

第一次作業計算題編程題 &#xff08;20分&#xff09; 第一次作業 計算題 &#xff08;20分&#xff09;求 E ( X ) E(X) E(X)&#xff0c; V a r ( X ) Var(X) Var(X) &#xff08;1&#xff09; X X X 服從 [ a , b ] [a,b] [a,b] 均勻分布。 &#xff08;2&#xff09;…

操作系統期末必考概念大綱(整理·全)

第一章 1、 操作系統的概念 2、 計算機發展的四個階段 3、 手工操作階段、批處理系統階段、多道程序系統階段、分時操作系統階段、通用操作系統階段 4、 批處理系統&#xff08;聯機、脫機&#xff09; 5、 操作系統的6個基本類型 6、 多道批處理特征 7、 分時系統特點 8、 算法…

第二節-K8s詞匯表

關鍵字詞匯表 https://kubernetes.io/zh-cn/docs/reference/glossary/?fundamentaltrue API Group (API 組)Kubernetes API 中的一組相關路徑。 API 服務器亦稱作:kube-apiserver API 服務器是 Kubernetes 控制平面的組件&#xff0c; 該組件負責公開了 Kubernetes API&…

2024年智慧教育與社會科學國際會議 (ICSSS 2024)

2024年智慧教育與社會科學國際會議 (ICSSS 2024) 2024 International Conference on Smart Education and Social Sciences 【重要信息】 大會地點&#xff1a;北京 大會官網&#xff1a;http://www.icicsss.com 投稿郵箱&#xff1a;icicssssub-conf.com 【注意&#xff1a;稿…

Stable-diffusion-WebUI 的API調用(內含文生圖和圖生圖實例)

前情提要 在之前嘗試使用Diffusers庫來進行stable-diffusion的接口調用以及各種插件功能實現&#xff0c;但發現diffusers庫中各復雜功能的添加較為麻煩&#xff0c;而且難以實現對采樣器的添加&#xff0c;safetensors格式模型的讀取。在官網上找到了webui有專門的api接口&am…

1117 數字之王

solution 判斷現有數字是否全為個位數 全為個位數&#xff0c;找出出現次數最多的數字&#xff0c;并首行輸出最多出現次數&#xff0c;第二行輸出所有出現該次數的數值不全為個位數 若當前位數值為0&#xff0c;無需處理若當前位數值非0&#xff0c;則每位立方相乘&#xff0…

10.x86游戲實戰-匯編指令lea

免責聲明&#xff1a;內容僅供學習參考&#xff0c;請合法利用知識&#xff0c;禁止進行違法犯罪活動&#xff01; 本次游戲沒法給 內容參考于&#xff1a;微塵網絡安全 工具下載&#xff1a; 鏈接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

Prometheus + Grafana 監控系統搭建使用指南-redis_exporter 安裝與配置

Redis 接入 Prometheus 監控系統 系列文章目錄 Prometheus 的安裝部署Grafana的安裝部署Linux服務器接入Prometheus監控-Node Exporter 安裝指南Prometheus 接入SpringBoot微服務監控Mysql 接入 Prometheus RocketMQ 接入Prometheus 監控ElasticSearch 接入 PrometheusNacos …