欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

從代碼角度理解:C語(yǔ)言中的“左移<<“與“右移>>“,且結(jié)合應(yīng)用場(chǎng)景-創(chuàng)新互聯(lián)

閱讀前請(qǐng)看一下:我是一個(gè)熱衷于記錄的人,每次寫博客會(huì)反復(fù)研讀,盡量不斷提升博客質(zhì)量。文章設(shè)置為僅粉絲可見,是因?yàn)閷懖┛痛_實(shí)花了不少精力。希望互相進(jìn)步謝謝!!

成都創(chuàng)新互聯(lián)專注于企業(yè)網(wǎng)絡(luò)營(yíng)銷推廣、網(wǎng)站重做改版、營(yíng)山網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、成都h5網(wǎng)站建設(shè)購(gòu)物商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為營(yíng)山等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。文章目錄
  • 閱讀前請(qǐng)看一下:我是一個(gè)熱衷于記錄的人,每次寫博客會(huì)反復(fù)研讀,盡量不斷提升博客質(zhì)量。文章設(shè)置為僅粉絲可見,是因?yàn)閷懖┛痛_實(shí)花了不少精力。希望互相進(jìn)步謝謝!!
  • 1、背景介紹
  • 2、雙目運(yùn)算符
  • 3、邏輯移位與算術(shù)移位
  • 4、實(shí)例分析
    • 4.1、左移
    • 4.2、右移
  • 5、常用場(chǎng)景
  • 6、總結(jié)

提示:以下是本篇文章正文內(nèi)容

文中第四部分代碼例子來(lái)自于此篇博客,衷心感謝此博主的分享《https://blog.csdn.net/weixin_42167759/article/details/85624722》
自己加了不少內(nèi)容上去,更好去理解。

1、背景介紹

Windows下進(jìn)行socket網(wǎng)絡(luò)編程,編寫校驗(yàn)和時(shí)遇到的問(wèn)題,記錄如下。


2、雙目運(yùn)算符

位移位運(yùn)算符是將數(shù)據(jù)看成二進(jìn)制數(shù),對(duì)其進(jìn)行向左或向右移動(dòng)若干位的運(yùn)算。

位移位運(yùn)算符分為左移和右移兩種,均為雙目運(yùn)算符。

例如: 8>>3 (意思是8向右移動(dòng)3位)第一運(yùn)算對(duì)象是移位對(duì)象,第二個(gè)運(yùn)算對(duì)象是所移的二進(jìn)制位數(shù)。

3、邏輯移位與算術(shù)移位

邏輯移位

簡(jiǎn)單理解就是物理上按位進(jìn)行的左右移動(dòng),兩頭用0進(jìn)行補(bǔ)充,不關(guān)心數(shù)值的符號(hào)問(wèn)題。
	
邏輯左移/右移指令只有它們的移位方向不同,移位后空出的位都補(bǔ)0。

算術(shù)移位

同樣也是物理上按位進(jìn)行的左右移動(dòng),兩頭用0或1進(jìn)行補(bǔ)充,但必須確保符號(hào)位不改變。
	
算術(shù)左移SAL把目的操作數(shù)的低位向高位移,空出的低位補(bǔ)0;
	
算術(shù)右移SAR把目的操作數(shù)的高位向低位移,空出的高位用最高位(符號(hào)位,0或1)填補(bǔ) 。

但我們好奇的是“i<<3”和“i>>3”到底采用的是算術(shù)還是邏輯移位呢?


4、實(shí)例分析 4.1、左移

當(dāng)向左邊移動(dòng)3位,采用的什么方式的移動(dòng)???

#includeint main()
{unsigned int ui = 8;
	ui = ui<< 3;
	printf("ui = %d 無(wú)符號(hào)類型左移(正數(shù))\n", ui);
	int i = 8;
	i = i<< 3;
	printf("i = %d  有符號(hào)類型左移(正數(shù))\n", i);
	int fi = -8;
	fi = fi<< 3;
	printf("fi = %d  有符號(hào)類型左移(負(fù)數(shù))\n", fi);
	return 0;
}

結(jié)果顯示:
ui = 64 無(wú)符號(hào)類型左移(正數(shù))
i = 64 有符號(hào)類型左移(正數(shù))
fi = -64 有符號(hào)類型左移(負(fù)數(shù))

分析:
注意數(shù)在計(jì)算機(jī)里的存儲(chǔ)和表示都是補(bǔ)碼!!!

無(wú)符號(hào)
8	    00000000 00000000 00000000 00001000
	<----- 左移3位,低位補(bǔ)0
64      00000000 00000000 00000000 01000000 

有符號(hào)(即最高位為符號(hào)位)
8	    00000000 00000000 00000000 00001000
	<----- 左移3位,低位補(bǔ)0
64      00000000 00000000 00000000 01000000 

有符號(hào)(即最高位為符號(hào)位)
-8	    11111111 11111111 11111111 11111000
	<----- 左移3位,低位補(bǔ)0
-64     11111111 11111111 11111111 11000000

結(jié)論:左移時(shí)總是移位和補(bǔ)零,無(wú)論是有符號(hào)還是無(wú)符號(hào)都可看作進(jìn)行了邏輯左移

4.2、右移

當(dāng)向右邊移動(dòng)3位,采用的什么方式的移動(dòng)???

#includeint main()
{unsigned int ui = 8;
	ui = ui >>3;
	printf("ui = %d 無(wú)符號(hào)類型右移(正數(shù))\n", ui);
	int i = 8;
	i = i >>3;
	printf("i = %d  有符號(hào)類型右移(正數(shù))\n", i);
	int fi = -8;
	fi = fi >>3;
	printf("fi = %d  有符號(hào)類型右移(負(fù)數(shù))\n", fi);
	return 0;
}

結(jié)果顯示:
ui = 1 無(wú)符號(hào)類型左移(正數(shù))
i = 1 有符號(hào)類型左移(正數(shù))
fi = -1 有符號(hào)類型左移(負(fù)數(shù))

分析:
注意數(shù)在計(jì)算機(jī)里的存儲(chǔ)和表示都是補(bǔ)碼!!!

無(wú)符號(hào)
8	    00000000 00000000 00000000 00001000
	----->右移3位,高位補(bǔ)0
1       00000000 00000000 00000000 00000001 

有符號(hào)(即最高位為符號(hào)位)
8	    00000000 00000000 00000000 00001000
	----->右移3位,高位補(bǔ)符號(hào)位,即0
1       00000000 00000000 00000000 00000001 

有符號(hào)(即最高位為符號(hào)位)
-8	    11111111 11111111 11111111 11111000
	----->右移3位,高位補(bǔ)符號(hào)位,即1
-1      11111111 11111111 11111111 11111111

結(jié)論:
右移時(shí)無(wú)符號(hào)數(shù)是移位和補(bǔ)零,此時(shí)稱為邏輯右移;
右移時(shí)而有符號(hào)數(shù)大多數(shù)情況下是移位和補(bǔ)最左邊的位(也就是補(bǔ)最高有效位),移幾位就補(bǔ)幾位,此時(shí)稱為算術(shù)右移

5、常用場(chǎng)景

其實(shí)可以理解為左移擴(kuò)大,右移縮小。

例如如下c代碼:

int a = 8;
int b1 = a * 4
int b2 = a<< 2  //左移2位相當(dāng)于擴(kuò)大4倍

int b3 = a / 4
int b4 = a >>2  //右移2位相當(dāng)于縮小4倍

結(jié)果

b1 = b2 = 4
b3 = b4=1

但是有時(shí)候想把兩個(gè)8位二進(jìn)制數(shù)拼成一個(gè)16位二進(jìn)制,“左移<<” 與 "右移>>"就很重要。例如 00001000 與 00000011 拼接成00001000 00000011:

分析:

二進(jìn)制
a                          00001000  <--左移8位,低位補(bǔ)0
a                 00001000 00000000
             +
b                          00000011
           ——————————————————————————
得到目標(biāo)結(jié)果       00001000 00000011

在scoket網(wǎng)絡(luò)編程,例如計(jì)算校驗(yàn)和時(shí),都知道是以16位二進(jìn)制進(jìn)行相加,那么計(jì)算機(jī)是以8位二進(jìn)制讀取,如何將兩個(gè)8位數(shù)字拼成一個(gè)16位數(shù)字,就是利用上方原理講解。

具體可見之前寫的筆記 《校驗(yàn)和之概念、計(jì)算原理、檢驗(yàn)原理、實(shí)例計(jì)算、代碼編程,力薦力薦力薦》

6、總結(jié)

左移時(shí)總是移位和補(bǔ)零,無(wú)論是有符號(hào)還是無(wú)符號(hào)都可看作進(jìn)行了邏輯左移

右移時(shí)無(wú)符號(hào)數(shù)是移位和補(bǔ)零,此時(shí)稱為邏輯右移;

右移時(shí)而有符號(hào)數(shù)大多數(shù)情況下是移位和補(bǔ)最左邊的位(也就是補(bǔ)最高有效位),移幾位就補(bǔ)幾位,此時(shí)稱為算術(shù)右移


碼字不易,謝謝點(diǎn)贊!!!
碼字不易,謝謝點(diǎn)贊!!!
碼字不易,謝謝點(diǎn)贊!!!

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

本文標(biāo)題:從代碼角度理解:C語(yǔ)言中的“左移<<“與“右移>>“,且結(jié)合應(yīng)用場(chǎng)景-創(chuàng)新互聯(lián)
標(biāo)題網(wǎng)址:http://www.chinadenli.net/article22/dodjjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT建站公司網(wǎng)站改版網(wǎng)站導(dǎo)航面包屑導(dǎo)航標(biāo)簽優(yōu)化

廣告

聲明:本網(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í)需注明來(lái)源: 創(chuàng)新互聯(lián)

營(yíng)銷型網(wǎng)站建設(shè)