操作符詳解(上)(新手向)

操作符詳解(上)

  • 一,算術操作符(雙目操作符)
    • 1:‘+’,‘-’,‘*’
    • 2:‘/’,‘%’
  • 一,單目操作符
    • 1:‘+’,‘-’
    • 2:‘!’
    • 3:‘&’
    • 4:‘*’
    • 5:‘sizeof’
    • 6:‘++’與‘--’
  • 三,移位操作符
    • 3.1 <<(左移操作符)
    • 3.2 <<(左移操作符)
    • 3.2 >>(右移操作符)
  • 四.位操作符
    • 4.1‘&’按位與
    • 4.2‘|’按位或
    • 4.3‘^’按位異或
    • 4.4‘~’按位取反

我們了解在C語言中有許多的操作符,這里我們詳細介紹部分操作符

一,算術操作符(雙目操作符)

1:‘+’,‘-’,‘*’

這三種算數操作符就相當于數學運算中的加法,減法,和乘法,是對兩個數進行數學運算,

int a=1;
int b=2;
\\加法
int c=a+b;(結果為3)
\\減法
int c=b-a;(結果為1)
\\乘法
int c=a*b;(結果為2)

2:‘/’,‘%’

==‘/’==進行的操作相當于數學運算中的除法,但有些許不同,分為兩種情況
第一種:當該操作符兩端都為整形,結果也為整形,該操作符是將兩數相除取商,例如5/3應該是商1余2,但結果只會顯示商1
在這里插入圖片描述
第二種:若想要輸出的結果為小數,那么就需要除號兩邊之一為浮點數,并且輸出的結果也要為浮點數,
在這里插入圖片描述
‘%’ 進行的操作為將%號兩邊的數相除取余,例如5/3應該是商1余2,但結果只會顯示余數2,
在這里插入圖片描述
因為上述操作符運算所需變量為兩個,也就是運算對象的個數是2,所以又被稱作雙目操作符。

一,單目操作符

1:‘+’,‘-’

這里的‘+’,‘-’并不是算數中的加號與減號,而是表示正數與負數,通常來說負數前會有‘-’號,而正數前的‘+’號通常省略。

2:‘!’

'!'為邏輯反操作符,用于對布爾值進行反轉,舉個例子:條件判斷中,一般條件成立即為真,布爾值為非0,加上!后非0為假,0為真,也就是條件成立為假,不成立為真,我們設計一個簡單的代碼來看一下具體效果:

#include<stdio.h>
int main()
{int a = 0;while (scanf("%d", &a) != EOF){if (a > 0){printf("%d\n", a);}else{printf("NO\n");}}return 0;
}

在這里插入圖片描述
這是沒有加‘!’操作符時的結果,

#include<stdio.h>
int main()
{int a = 0;while (scanf("%d", &a) != EOF){if(!(a > 0)){printf("%d\n", a);}else{printf("NO\n");}}return 0;
}

在這里插入圖片描述
這是加上!操作符后的結果。

3:‘&’

用于獲取變量的內存地址。

4:‘*’

間接引用和解引用操作符,獲取指針所指向的值。

5:‘sizeof’

用于獲取數據類型或對象在內存中的大小(以字節為單位)
在這里插入圖片描述

6:‘++’與‘–’

自增‘++’與自減‘–’,作用分別為將操作數的值增加1和減少1。
在實際操作中又分為前置和后置兩種情況,
‘++’和‘–’前置為操作數先變化后使用,后置為操作數先使用后變化,如下圖所示:

#include<stdio.h>
int main()
{int a = 1;int b = 1;int c = 1;int d = 1;printf("%d\n",++a);printf("a=%d\n",a);printf("%d\n",b++);printf("b=%d\n",b++);printf("%d\n",--c);printf("c=%d\n",--c);printf("%d\n",d--);printf("d=%d\n",d--);return 0;
}

其輸出結果為:
在這里插入圖片描述

這里可以看到前置和后置操作符最終輸出的結果并不相同。
介紹完C語言中比較簡單的兩種操作符,我們再來介紹一下比較復雜的操作符,位操作符

三,移位操作符

在介紹移位操作符前,還得先介紹十進制數字在計算機中的存儲方式以及源碼,反碼,補碼。

十進制數在計算機中通常不是直接儲存的,而是先轉化位二進制數在進行存儲。而為了區分正負數,計算機對有符號整數采用了不同的編碼儲存方式,也就是源碼反碼補碼

在現代的計算機中主要采用的數字集成電路完成,數字電路通過高低電平只能表示0和1,所以就出現了,計算機只會識別0和1。無論是存儲還是計算,計算機均采用二進制體系完成。
在C語言中不同數據類型的大小不一樣,如int類型每個占4個字節,而每個字節又等于8個比特位。
sizeof(int)=1byte=8bit每個比特位存儲的便是0或1。
一個int類型共有32個比特位,每個比特位只能是0或1,也就是說在計算機中整型是采用二進制的方式存儲的,那么int的取值范圍便是-231~231-1
了解了上面的基本概念后,我們就來詳細了解一下源碼,反碼和補碼,
注意,源碼,反碼和補碼只能應用在整數中
而正整數和負整數的存儲是不一樣的,我們分開討論:
正整數:正整數的源碼=反碼=補碼
負整數:負整數在計算機中是以補碼的形式進行儲存的,那么該如何得到負整數的補碼?
首先,我們要了解計算機區分正,負整數的原理,在計算機中為了區分正負整數,在整形的32位比特位中,正整數的最高位比特位為0,而負整數的最高位為1,將負整數的源碼除了最高位的符號位按位取反得到負整數的反碼,反碼加1得到負整數的補碼。
下面以x64環境下的整型存儲為例:

int a=5;
a的源碼=反碼=補碼為:0000 0000 0000 0000 0000 0000 0000 0101
int b=-5;
b的源碼為:1000 0000 0000 0000 0000 0000 0000 0101反碼為:1111 1111 1111 1111 1111 1111 1111 1010補碼為:1111 1111 1111 1111 1111 1111 1111 1011

而計算機之所以會有三種儲存整形的方式的原因都是因為計算的難易,
源碼的一個缺點是存在兩種不同的表示方式來表示0(0000 和 1000),這可能導致一些不必要的復雜性。
反碼的一個優點是消除了0的兩種表示,但缺點是進行加減運算時相對復雜。
補碼是最常用的表示法,特別是在現代計算機中。補碼的一個主要優點是它使得加法運算更加簡單,因為對于任何整數x,都有 x + (-x) = 0,這在補碼表示下總是成立。另一個優點是只有一個0的表示(0000),這使得處理更加簡單。
下面就介紹2種移位操作符:
>>(右移操作符)和<<(左移操作符)
注意:移位操作符的操作數只能是整數

3.1 <<(左移操作符)

3.2 <<(左移操作符)

移位規則:將整數的補碼整體向左移動一位,左邊的拋棄,右邊空的補0;
演示:

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

輸出結果:
在這里插入圖片描述

移位圖解:
在這里插入圖片描述

3.2 >>(右移操作符)

右移操作符相對左移來說較為復雜,分為邏輯右移和算術右移
邏輯右移:左邊?0填充,右邊丟棄
邏輯右移一位圖解:
在這里插入圖片描述

算術右移:左邊?原該值的符號位填充,右邊丟棄
圖解:
在這里插入圖片描述
注意對于移位運算符,不要移動負數位,這個是標準未定義的

四.位操作符

注意:位操作符的操作數必須是整數

4.1‘&’按位與

該操作符在二進制層面上對兩個數進行操作,它比較兩個數的相應位,只有當兩個相應的位都為1時,結果位才為1,否則為0;
代碼和圖解演示:

#include<stdio.h>
int main() 
{int num1 = 6;int num2 = 13;int num3 = num1 & num2;printf("%d\n", num3 );return 0;
}

在這里插入圖片描述
在這里插入圖片描述
圖解:(前面為0的位省略)
在這里插入圖片描述

4.2‘|’按位或

該操作符在二進制層面上對兩個數進行操作,它比較兩個數的相應位,只要兩個數中任意一個數的相應位為1,那么結果位就為1,否則為0;
代碼和圖解演示:

#include<stdio.h>
int main() 
{int num1 = 2;int num2 = 13;int num3 = num1 | num2;printf("%d\n", num3 );return 0;
}

在這里插入圖片描述

圖解:(前面為0的位省略)
在這里插入圖片描述

4.3‘^’按位異或

該操作符在二進制層面上對兩個數進行操作,它比較兩個數的相應位,當兩個數的相應位不同時,結果位為1;當兩個數的相應位相同時,結果位為0。
代碼和圖解演示:

#include<stdio.h>
int main() 
{int num1 = 3;int num2 = 13;int num3 = num1 ^ num2;printf("%d\n", num3 );return 0;
}

在這里插入圖片描述

圖解:(前面為0的位省略)
在這里插入圖片描述

4.4‘~’按位取反

該操作符用于對二進制數的每一位執行邏輯非操作。具體地說,它將二進制數中的每個0變為1,每個1變為0。
代碼和圖解演示:

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

在這里插入圖片描述

圖解:(前面為0的位省略)
在這里插入圖片描述

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

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

相關文章

linux 排查java內存溢出(持續更新中)

場景 tone.jar 啟動后內存溢出,假設pid 為48044 排查 1.確定java程序的pid(進程id) ps 或 jps 都可以 ps -ef | grep tone jps -l 2.查看堆棧信息 jmap -heap 48044 3.查看對象的實例數量顯示前30 jmap -histo:live 48044 | head -n 30 4.查看線程狀態 jstack 48044

Spring 事件監聽

參考&#xff1a;Spring事件監聽流程分析【源碼淺析】_private void processbean(final string beanname, fi-CSDN博客 一、簡介 Spring早期通過實現ApplicationListener接口定義監聽事件&#xff0c;Spring 4.2開始通過EventListener注解實現監聽事件 FunctionalInterface p…

Rustdesk客戶端源碼編譯

1.安裝VCPKG windows平臺vcpkg安裝-CSDN博客 2.使用VCPKG安裝: windows平臺vcpkg安裝-CSDN博客 配置VCPKG_ROOT環境變量: 安裝靜態庫: ./vcpkg install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static aom:x64-windows-static 靜態庫安裝成…

【C語言深度解剖】(15):動態內存管理和柔性數組

&#x1f921;博客主頁&#xff1a;醉竺 &#x1f970;本文專欄&#xff1a;《C語言深度解剖》 &#x1f63b;歡迎關注&#xff1a;感謝大家的點贊評論關注&#xff0c;祝您學有所成&#xff01; ??&#x1f49c;&#x1f49b;想要學習更多C語言深度解剖點擊專欄鏈接查看&…

I.MX6ULL的官方 SDK 移植實驗

系列文章目錄 I.MX6ULL的官方 SDK 移植實驗 I.MX6ULL的官方 SDK 移植實驗 系列文章目錄一、前言二、I.MX6ULL 官方 SDK 包簡介三、硬件原理圖四、試驗程序編寫4.1 SDK 文件移植4.2 創建 cc.h 文件4.3 編寫實驗代碼 五、編譯下載驗證5.1編寫 Makefile 和鏈接腳本5.2編譯下載 一、…

列表元素添加的藝術:從單一到批量

新書上架~&#x1f447;全國包郵奧~ python實用小工具開發教程http://pythontoolsteach.com/3 歡迎關注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目錄 一、引言 二、向列表中添加單一元素 1. append方法 2. insert方法 三、向列表中添加批量…

MySQL 存儲過程(實驗報告)

一、實驗名稱&#xff1a; 存儲過程 二、實驗日期&#xff1a; 2024 年5 月 25 日 三、實驗目的&#xff1a; 掌握MySQL存儲過程的創建及調用&#xff1b; 四、實驗用的儀器和材料&#xff1a; 硬件&#xff1a;PC電腦一臺&#xff1b; 配置&#xff1a;內存&#xff0…

Android 配置本地解決下載 Gradle 慢的問題

步驟1 打開項目下 gradle/wrapper/gradle-wrapper.properties 文件。 步驟2 文件內容如下。 #Sat May 25 16:24:00 CST 2024 distributionBaseGRADLE_USER_HOME distributionPathwrapper/dists distributionUrlhttps\://services.gradle.org/distributions/gradle-8.7-bin…

SW焊接路徑不能是閉合的

如果是整個圓,就不能作出焊件

【Docker學習】深入研究命令docker exec

使用docker的過程中&#xff0c;我們會有多重情況需要訪問容器。比如希望直接進入MySql容器執行命令&#xff0c;或是希望查看容器環境&#xff0c;進行某些操作或訪問。這時就會用到這個命令&#xff1a;docker exec。 命令&#xff1a; docker container exec 描述&#x…

ssm275寵物醫院管理系統+vue-手把手調試搭建

ssm275寵物醫院管理系統vue-手把手調試搭建 ssm275寵物醫院管理系統vue-手把手調試搭建

Jmeter預習第1天

Jmeter參數化&#xff08;重點&#xff09; 本質&#xff1a;使用參數的方式來替代腳本中的固定為測試數據 實現方式&#xff1a; 定義變量&#xff08;最基礎&#xff09; 文件定義的方式&#xff08;所有測試數據都是固定的情況下[死數據]&#xff0c;eg:注冊登錄&#xff0…

Linux -- 進程間通信的五種方式

IPC&#xff08;InterProcess Communication&#xff09;的方式通常有管道&#xff08;包括無名管道和命名管道&#xff09;、消息隊列、信號量、共享存儲、Socket、Streams等。其中Socket和Stream支持不同主機上的兩個進程IPC。 管道&#xff08;Pipes&#xff09;&#xff1a…

STM32中斷編程入門

文章目錄 一、 理論部分1.中斷系統2.中斷執行流程3.NVIC的基本結構4.EXTI介紹5.AFIO復用IO口 二、實驗目的&#xff1a;學習stm32中斷原理和開發編程方法。使用標準完成以下任務&#xff1a;&#xff08;一&#xff09;實驗一 開關控制LED的亮滅1.代碼部分2.運行結果 &#xff…

Qt | QFormLayout 類(表單布局)

01、上節回顧 Qt | QGridLayout 類(網格布局)02、簡介 1、QFormLayout 布局以兩列的形式列出其子項目, 2、QFormLayout 被分成兩列,左列是標簽(label)部分,通常由標簽 QLabel 組成,右列是由 字段(field)部分,通常是 QLineEdit 行編輯器,QSpinBox 旋轉框等部件,注意:…

【簡單易用,新人友好】一個輕量級生物信息學流程框架,從此解決99%的生物信息學流程搭建問題...

生物信息學數據分析流程的搭建是一項繁重而復雜的工作。隨著行業的發展&#xff0c;各種生信流程框架層出不窮&#xff0c;比如有: NextflowSnakemakeCWLWDL 各種標準&#xff0c;各種規則&#xff0c;令人眼花繚亂。選擇太多&#xff0c;往往令人無所適從。特別是新進入行業的…

小程序的深層了解

一:wxss的全局樣式和局部樣式 寫在文件上,第一個路徑會執行全局和局部自帶的wxss給wxml,會執行wxml,會執行json和js. 無論那個文件都會執行文件夾內的和外部的app.wxss,但是如果有一樣的屬性,則看屬性的權重,權重一樣,則設置局部樣式. 二:全局配置 wx:key"寫的是data內…

17.7K星開源產品分析平臺:Posthog

Posthog&#xff1a;開源洞察&#xff0c;產品優化的得力助手 - 精選真開源&#xff0c;釋放新價值。 概覽 PostHog是一個全面開源的平臺&#xff0c;旨在幫助團隊構建更好的產品。它提供了從產品分析到會話回放、功能標志和A/B測試等一系列工具&#xff0c;支持自托管&#x…

如何通過Nginx配置將請求轉發到conf.d目錄下的各個配置文件

目錄 如何通過Nginx配置將請求轉發到conf.d目錄下的各個配置文件1. 修改主配置文件 nginx.conf2. 在 conf.d 目錄中創建站點配置3. 設置站點根目錄和權限4. 檢查配置并重新加載Nginx總結 如何通過Nginx配置將請求轉發到conf.d目錄下的各個配置文件 在使用Nginx進行網站管理時&…

讀人工智能時代與人類未來筆記14_管控人工智能

1. 管控人工智能 1.1. 歷史上的戰場進一步推進到與數字網絡相連的所有地方 1.2. 數字程序現在控制著一個由眾多實體系統構成的龐大且仍在不斷增長的領域&#xff0c;而且越來越多的此類系統已實現網絡化 1.2.1. 在某些情況下甚至連門鎖和冰箱都實現了網絡化 1.2.2. 這催生出…