c#位運(yùn)算的基本概念與計(jì)算過程

本篇內(nèi)容主要講解“c#位運(yùn)算的基本概念與計(jì)算過程”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“c#位運(yùn)算的基本概念與計(jì)算過程”吧!

創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供原平網(wǎng)站建設(shè)、原平做網(wǎng)站、原平網(wǎng)站設(shè)計(jì)、原平網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、原平企業(yè)網(wǎng)站模板建站服務(wù),10多年原平做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

前言

一些非常基礎(chǔ)的東西,在實(shí)際工作中沒有用到、很少用到。一旦遇到,又不知所云。最近遇到一個(gè)問題,把一個(gè)int16(short) 、兩個(gè)bool變量整合成一個(gè)int32(int),當(dāng)聽到這個(gè)要求時(shí),我第一反應(yīng)是不是需求弄錯(cuò)了,后來才發(fā)現(xiàn)是自己才疏學(xué)淺,這里就需要位運(yùn)算相關(guān)的概念。
這里補(bǔ)充一下這幾個(gè)基本概念
位、字節(jié)、字符(英文字母)、漢字、KB、MB、GB、TB的關(guān)系
1.位:bit,也叫比特位,是計(jì)算機(jī)表示數(shù)據(jù)最小的單位,用二進(jìn)制0和1來存儲(chǔ)
2.字節(jié):byte,1byte(1B)=8b,一個(gè)字節(jié)=8位
3.字符:char,1char=2byte=16b,1個(gè)字符=2個(gè)字節(jié)=16位
4.KB,1KB=1024byte(1024B)
5.MB,1MB=1014KB
6.GB,1GB=1024MB
7TB,1TB=1024GB
一個(gè)漢字占兩個(gè)字節(jié),也就是16位,一篇1000字的文章,大概就是16*1000 個(gè)二進(jìn)制的0或1 。
一個(gè)10M的短視頻,也就是10M=1024KB*10=1024字節(jié)*10*10=1024位*8*10*10
大概就是919200個(gè)二進(jìn)制的0和1了
short 是16位,int是32位,long是64位

1.什么是位運(yùn)算

在掌握位運(yùn)算之前,應(yīng)該清楚什么是位運(yùn)算?什么樣的數(shù)據(jù)類型可以進(jìn)行位運(yùn)算?云運(yùn)算的結(jié)果是什么?
1.位運(yùn)算的對(duì)象是int 、char 類型,簡(jiǎn)而言之就是對(duì)二進(jìn)制的1101(13)進(jìn)行運(yùn)算
2.位運(yùn)算的結(jié)果是整型

符號(hào)意義運(yùn)算對(duì)象類型運(yùn)算結(jié)果類型示例
~邏輯非運(yùn)算整型、char整型~a
&邏輯與運(yùn)算a&b
|邏輯或運(yùn)算a|b
<<位左移運(yùn)算a<<2
>>位右移運(yùn)算a>>2

2.位邏輯與運(yùn)算

&與運(yùn)算是將兩個(gè)運(yùn)算對(duì)象按位于進(jìn)行與運(yùn)算。
規(guī)則是:
1&1=1
0&1=0
0&0=0
如圖:
c#位運(yùn)算的基本概念與計(jì)算過程
15的二進(jìn)制是0000 1111
20的二進(jìn)制是0001 0100
15&20的結(jié)果就是0000 0100 即結(jié)果是4

3.位邏輯或運(yùn)算

c#位運(yùn)算的基本概念與計(jì)算過程
|位邏輯或運(yùn)算是將兩個(gè)運(yùn)算對(duì)象按位進(jìn)行或運(yùn)算,運(yùn)算的規(guī)則是
1|1=1
1|0=1
0|0=0
如15|20的結(jié)果計(jì)算結(jié)果就是31 即二進(jìn)制0001 1111
0000 1111(15的二進(jìn)制) | 0001 0100(20的二進(jìn)制)= 0001 1111結(jié)果是31

4.位邏輯異或運(yùn)算

c#位運(yùn)算的基本概念與計(jì)算過程
^ 位邏輯異或運(yùn)算 是將兩個(gè)運(yùn)算對(duì)象按位進(jìn)行異或運(yùn)算,規(guī)則是:
1異或1等于0
1異或0等于1
0異或0等于0
即:相同得0,相異得1。
0000 1111 ^ 0001 0100= 0001 1011結(jié)果是27

5.位邏輯左移運(yùn)算

c#位運(yùn)算的基本概念與計(jì)算過程
位邏輯左移運(yùn)算是將按位向左邊移動(dòng)若干位,左移后空出的部分為0
比如15的二進(jìn)制0000 1111 左移8位就是1111 0000 0000(15<<8)結(jié)果是3840
左移3位(15<<3)就是0111 1000結(jié)果是120
左移就是相當(dāng)于乘,左移1位就是相當(dāng)于乘以2的1次方,左移3位就是相當(dāng)于乘以2的3次方,左移8位就是相當(dāng)于乘以2的8次方
a<<1 =a乘以2的1次方
a<<2 =a乘以2的2次方
a<<3 =a乘以2的3次方

6.位邏輯右移運(yùn)算

c#位運(yùn)算的基本概念與計(jì)算過程
位邏輯右移運(yùn)算是將按位向右邊移動(dòng)若干位,右移后空出的部分為0
比如0000 1111(15)左移3位(15<<3)就是0000 0001(1)
右移相當(dāng)于整除,右移1位相當(dāng)于除以2的1次方,右移2相當(dāng)于除以2的2次方。
a>>1 = a整除2的1次方
a>>2 = a整除2的2次方
a>>3 = a整除2的3次方

7.位運(yùn)算的作用

如將一個(gè)月的簽到記錄保存到1個(gè)int類型中、權(quán)限設(shè)置、將4個(gè)short合并成一個(gè)long類型,16個(gè)bool類型合并成1個(gè)short。
如這個(gè)問題所示
需求:C# 用兩個(gè)short,一個(gè)int32拼成一個(gè)long型
要求:現(xiàn)在有兩個(gè)short和一個(gè)int,需要拼成一個(gè)long型,高16位用short,中間32位用int,最低16位用另外一個(gè)short
https://bbs.csdn.net/topics/392202825?page=1
做法就是:
((long)shortA << 48 )+ ((long)intA << 16)+ shortB=longResult
講解:
高16位的shortA先左移48,那么longResult 64位的最左邊16位(高16位)就是shortA
中間32位intA 就是先將intA左移16位,那么這個(gè)longResult的中間32位就是intA
低16位就是最后剩下的16位用shortB。
那么疑問來了可以通過longResult返推出shortA,shortB,intA。當(dāng)然是不能這是直接相加。
返回不應(yīng)該用這種組合字符串的方式
((long)shortA << 48 ) 16位二進(jìn)制0或1的字符串
((long)intA << 16) 32位二進(jìn)制0或1的字符串
shortB 16位二進(jìn)制0或1的字符串
將這三個(gè)字符串拼接成64位二進(jìn)制字符串,再將這個(gè)64位二進(jìn)制字符串轉(zhuǎn)成一個(gè)long。

到此,相信大家對(duì)“c#位運(yùn)算的基本概念與計(jì)算過程”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

網(wǎng)站標(biāo)題:c#位運(yùn)算的基本概念與計(jì)算過程
本文地址:http://muchs.cn/article24/pgooce.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營(yíng)銷推廣、網(wǎng)站內(nèi)鏈品牌網(wǎng)站制作、虛擬主機(jī)、網(wǎng)站設(shè)計(jì)公司、軟件開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司