操作符詳解上(非常詳細)

目錄

  • 二進制介紹
    • 二進制
    • 2進制轉10進制
    • 10進制轉2進制數字
    • 2進制轉8進制和16進制
      • 2進制轉8進制
      • 2進制轉16進制
  • 原碼、反碼、補碼
  • 移位操作符
    • 左移操作符
    • 右移操作符
  • 位操作符:&、|、^
  • 逗號表達式

二進制介紹

在初學計算機時我們常常會聽到2進制、8進制、10進制、16進制…這些聽著非常高級的詞語,其實8進制、10進制、16進制幾乎和2進制非常相似,只是稍微有一些不同,下面我們對這些進行較詳細的介紹

二進制

我們舉一個例子,比如用不同進制形式來表示數值15:

152進制:1111
158進制:17
1510進制:15
1516進制:F

我們還是先從熟悉的10進制開始講解:
在我們學過的加減法中我們常常用這樣的方式進行計算:
在這里插入圖片描述
由于個位數字相加滿10于是向十位數進1,而十位數也滿十于是向百位數進1
因此我們從這里可以得知,所謂的十進制其實是滿10進1,并且每位數字是不能超過10的
其實其他進制也相同,比如2進制
?2進制為滿2進1
?2進制的數字每?位都是0~1的數字組成
所以1011就是15的二進制數了

2進制轉10進制

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

10進制轉2進制數字

方法如圖:
在這里插入圖片描述我們只需要對125不斷的除2即可得到125在2進制中的數字(其實這里我還沒有完全理解為什么這樣就可以得出結果,所以后期如果我想通了會在這里加上自己的理解

2進制轉8進制和16進制

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進制轉16進制

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

原碼、反碼、補碼

整數的2進制表示方法有三種,即原碼、反碼和補碼
三種表示方法均有符號位和數值位兩部分,符號位都是用0表示“正”,用1表示“負”,而數值位最高位的?位是被當做符號位,剩余的都是數值位。
正整數的原、反、補碼都相同。
負整數的三種表示方法各不相同。
原碼:直接將數值按照正負數的形式翻譯成二進制得到的就是原碼。
反碼:將原碼的符號位不變,其他位依次按位取反就可以得到反碼。
補碼:反碼+1就得到補碼

對于整形來說:數據存放內存中其實存放的是補碼
因為在計算機系統中,數值?律用補碼來表示和存儲。原因在于,使用補碼,可以將符號位和數值域統?處理同時,加法和減法也可以統?處理(CPU只有加法器)此外,補碼與原碼相互轉換,其運算過程是相同的,不需要額外的硬件電路

移位操作符

操作符號如下:
<<左移操作符
>>右移操作符
注:移位操作符的操作數只能是整數因為原碼、反碼、補碼中提到的是整數的2進制,如果是小數的話不能表示)(但是我記得好像有小數表示的方法只不過不知道能不能用在這里,可能是我沒搞清楚

左移操作符

在這里插入圖片描述

右移操作符

移位規則:首先右移運算分兩種:
1.邏輯右移:左邊用0填充,右邊丟棄
在這里插入圖片描述

2.算術右移:左邊用原該值的符號位填充,右邊丟棄
在這里插入圖片描述
特別提醒對于移位運算符,不要移動負數位,這個是標準未定義的(而且也沒有必要這樣)
比如:

int num = 10;
num>>-1;//error

位操作符:&、|、^

位操作符有:

1.& //按位與    對應位同時為“1”時才為“1”,否則為0
2.| //按位或    對應位只要有一個為1就為1
3.^ //按位異或   對應位相同為 0,不同為 1。
注:他們的操作數必須是整數

代碼如下:

#include <stdio.h>
int main()
{int num1 = -3;int num2 = 5;num1 & num2;num1 | num2;num1 ^ num2;
return 0;
}

下面有?道面試題:
不能創建臨時變量(第三個變量),實現兩個數的交換
法一:

可能有很多人都會這樣做
#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
a = a+b;
b = a-b;
a = a-b;
printf("a = %d b = %d\n", a, b);
return 0;
}

這種做法有一個缺陷,就是如果a+b過大就會導致出錯,因為int有范圍限制,所以這種方法也要分情況用
我們看看法二:

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

這種方法就很難想到了,但是也有缺陷,就是如果是有負數的話,結果就會有問題,因此這方法僅適用于正數

例題:編寫代碼實現:求?個整數存儲在內存中的二進制中1的個數:

//?法1
#include <stdio.h>
int main()
{
int num = 10;
int count= 0;//計數
while(num)
{
if(num%2 == 1)
count++;
num = num/2;
}
printf("?進制中1的個數 = %d\n", count);
return 0;
}
//?法2:
#include <stdio.h>
int main()
{
int num = -1;
int i = 0;
int count = 0;//計數
for(i=0; i<32; i++)
{
if( num & (1 << i) )
count++;
}
printf("?進制中1的個數 = %d\n",count);
return 0;
}
//?法3:
#include <stdio.h>
int main()
{
int num = -1;
int i = 0;
int count = 0;//計數
while(num)
{
count++;
num = num&(num-1);
}
printf("?進制中1的個數 = %d\n",count);
return 0;
}

逗號表達式

逗號表達式,就是用逗號隔開的多個表達式。
逗號表達式,從左向右依次執行。整個表達式的結果是最后一個表達式的結果。(如果左邊表達式為假就不用執行右邊的表達式了)

//代碼1
int a = 1;
int b = 2;
int c = (a>b, a=b+10, a, b=a+1);//逗號表達式
//代碼2
if (a =b + 1, c=a / 2, d > 0)
while (a = get_val(), count_val(a), a>0)
{
..........
}

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

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

相關文章

C++中String的語法及常用接口用法

在C語言中&#xff0c;string是一個標準庫類&#xff08;class&#xff09;&#xff0c;用于處理字符串&#xff0c;它提供了一種更高級、更便捷的字符串操作方式&#xff0c;string 類提供了一系列成員函數和重載運算符&#xff0c;以便于對字符串進行操作和處理。 一、string…

scala TraversableOnce

scala TraversableOnce 1. 由來 TraversableOnce是Scala中的一個特質&#xff08;trait&#xff09;&#xff0c;它定義了一組操作&#xff0c;用于遍歷和處理集合類型的元素。它是Scala集合層次結構中的基本概念之一。 2. 示例 以下是使用TraversableOnce的簡單示例&#…

Redis高可用:主從復制詳解

目錄 1.什么是主從復制&#xff1f; 2.優勢 3.主從復制的原理 4.全量復制和增量復制 4.1 全量復制 4.2 增量復制 5.相關問題總結 5.1 當主服務器不進行持久化時復制的安全性 5.2 為什么主從全量復制使用RDB而不使用AOF&#xff1f; 5.3 為什么還有無磁盤復制模式&#xff…

C# 一種求平方根的方法 立方根也可以 極大 極小都可以

不知道研究這些干啥&#xff0c;純純的浪費時間。。。 public static double TQSquare(double number){Random random1 new Random(DateTime.Now.Millisecond);double x1 0, resultX1 0, diff 9999999999, diffTemporary 0;for (int i 0; i < 654321; i){if (random1…

怎么做Tik Tok海外娛樂公會呢?新加坡市場怎么樣?

一、為什么選擇TikTok直播 1. 海外市場潛力巨大 ? 自2016年始&#xff0c;多家直播平臺陸續拓展至東南亞、中東、俄羅斯、日韓、歐美、拉美等地區。 ? 海外市場作為直播發展新藍海&#xff0c;2021年直播行業整申請cmxyci體規模達百億美元&#xff0c;并維持高速增長。 &a…

C++初階語法——內部類

前言&#xff1a;內部類&#xff0c;顧名思義是定義在類中的類&#xff0c;許多人會以為它屬于外部的類&#xff0c;實際上并不是&#xff0c;它們是兩個獨立的類&#xff0c;但是內部類受外部類類域的限制。 目錄 一.概念二.特性1.內部類和外部類相互獨立2.內部類是外部類的友…

10,遍歷任意參

遍歷可變參數 遍歷可變參數獲取可變參數大小通過遞歸方式遍歷可變參數通過可變參數特性來求和 遍歷可變參數 #pragma oncetemplate<class ... ParamTypes> void Func(paramTypes &... param) {}可以看作是有一個結構體里面裝滿了參數&#xff0c;把結構體放到…中。…

Git多版本并行開發實踐

本文目的&#xff1a; 實現多個項目同時進行的git多版本管理工作流。 名詞解釋&#xff1a; feature-XXXX&#xff1a;特性分支指CCS中一個項目或者一個迭代&#xff0c;在該分支上開發&#xff0c;完成后&#xff0c;合并&#xff0c;最后&#xff0c;刪除該分支&#xff0c;…

【廣州虛擬現實開發】VR智能中控系統進一步提高VR教學管理水平

隨著科技的不斷發展&#xff0c;虛擬現實(VR)技術已經逐漸走進了人們的生活。在教育領域&#xff0c;VR技術也得到了廣泛的應用&#xff0c;尤其是在教學終端中控系統方面。那么&#xff0c;廣州華銳互動開發的VR智能中控系統對學校有何益處呢&#xff1f; 首先&#xff0c;VR智…

RocketMQ(模式詳解,安裝)及控制臺安裝

下載 環境 64位操作系統&#xff0c;推薦 Linux/Unix/macOS 64位 JDK 1.8下載地址 https://rocketmq.apache.org/zh/download/ RocketMQ 的安裝包分為兩種&#xff0c;二進制包和源碼包。 二進制包是已經編譯完成后可以直接運行的&#xff0c;源碼包是需要編譯后運行的。 單…

LVS負載均衡DR(直接路由)模式

在LVS&#xff08;Linux Virtual Server&#xff09;負載均衡中的DR&#xff08;Direct Routing&#xff09;模式下&#xff0c;數據包的流向如下&#xff1a; 客戶端發送請求到負載均衡器&#xff08;LVS&#xff09;的虛擬IP&#xff08;VIP&#xff09;。負載均衡器&#x…

基于C++ 的OpenCV繪制多邊形,多邊形多條邊用不用的顏色繪制

使用基于C的OpenCV庫來繪制多邊形&#xff0c;并且為多邊形的不同邊使用不同的顏色&#xff0c;可以按照以下步驟進行操作&#xff1a; 首先&#xff0c;確保你已經安裝了OpenCV庫并配置好了你的開發環境。 導入必要的頭文件&#xff1a; #include <opencv2/opencv.hpp&g…

Bryntum Scheduler Pro 5.5.1 Crack

BRYNTUM 調度程序專業版,專業的日程安排小部件 Bryntum Scheduler Pro 5.5.1 一個專業有大腦的調度UI組件。Scheduler Pro 可幫助您安排任務&#xff0c;同時考慮資源和任務的可用性。 連接您的任務 讓 Scheduler Pro 處理剩下的事情。它將根據您定義的鏈接安排您的任務并遵守任…

BNC連接器市場分析:全球BNC連接器市場規模不斷增長

產品定義及統計范圍 BNC&#xff08;Bayonet-Neill-Concelman&#xff09;連接器是一種通常用于視頻和音頻信號傳輸的電連接器。它是以其兩位發明者Paul Neill和Carl Concelman的名字命名的&#xff0c;他們在20世紀40年代末開發了這種連接器。BNC連接器是一種設計用于同軸電纜…

ansible 修改遠程主機nginx配置文件

安裝ansible brew install ansible 或者 pip3 install ansible 添加遠程主機 設置秘鑰 mac登錄遠程主機 ssh -p 5700 root192.168.123.211 ssh localhost #設置雙機信任 ssh-kyegen -t rsa #設置主機兩邊的ssh配置文件 vi /etc/ssh/sshd_config/ PermitRootL…

UniApp 制作高德地圖插件

1、下載Uni插件項目 在Uni官網下載Uni插件項目&#xff0c;并參考官網插件項目創建插件項目. 開發者須知 | uni小程序SDK 如果下載下來項目運行不了可以參考下面鏈接進行處理 UniApp原生插件制作_wangdaoyin2010的博客-CSDN博客 2、引入高德SDK 2.1 在高德官網下載對應SD…

207. 課程表

思路 首先要完全理解題意&#xff0c;這道題的[a,b]并不是b滿足了a就可以真正的學習a這門課了&#xff0c;因為a還有可能需要其他選修課的條件。類似下圖。 ??這題的思路在于使用合適的數據結構來存儲&#xff0c;這里用hash表來存儲如果1這門課可以修了之后&#xff0c;可以…

docker pull 設置代理 centos

On CentOS the configuration file for Docker is at: /etc/sysconfig/docker 用 root 權限打開 text editor sudo gedit 注意 加引號 Adding the below line helped me to get the Docker daemon working behind a proxy server: HTTP_PROXY“http://<proxy_host>:&…

linux下shell編寫軟件看門狗

遇到一個問題&#xff0c;就是軟件崩潰&#xff0c;可以讓軟件自動重啟&#xff0c;而且數據庫必須是軟件崩潰之前的 #!/bin/sh while true do /app/app/record -qws cp -pr /msata/db/db_record.db /data/log/db_record.db mv /msata/db/db_record1.db /msata/db/db_record.d…

ubuntu20.04磁盤滿了 /dev/mapper/ubuntu--vg-ubuntu--lv 占用 100%

問題 執行 mysql 大文件導入任務&#xff0c;最后快完成了&#xff0c;查看結果發現錯了&#xff01;悲催&#xff01;都執行了 兩天了 The table ‘XXXXXX’ is full &#xff1f; 磁盤滿了&#xff1f; 剛好之前另一個 centos 服務器上也出現過磁盤滿了&#xff0c;因此&a…