無(wú)符號(hào)右移和右移運(yùn)算符的區(qū)別 C語(yǔ)言帶符號(hào)數(shù)的左移右移搞不清楚?
C語(yǔ)言帶符號(hào)數(shù)的左移右移搞不清楚?對(duì)于位操作,操作對(duì)象可以是有符號(hào)的或無(wú)符號(hào)的。如果運(yùn)算符有符號(hào)且其值為負(fù),則位操作如何處理運(yùn)算符的“有符號(hào)位”取決于機(jī)器。左移運(yùn)算符在右側(cè)插入一個(gè)值為0的二進(jìn)制位。右
C語(yǔ)言帶符號(hào)數(shù)的左移右移搞不清楚?
對(duì)于位操作,操作對(duì)象可以是有符號(hào)的或無(wú)符號(hào)的。如果運(yùn)算符有符號(hào)且其值為負(fù),則位操作如何處理運(yùn)算符的“有符號(hào)位”取決于機(jī)器。左移運(yùn)算符在右側(cè)插入一個(gè)值為0的二進(jìn)制位。右移運(yùn)算符的行為>>;取決于左側(cè)操作對(duì)象的類(lèi)型:如果是無(wú)符號(hào)的,則在左側(cè)插入一個(gè)值為0的二進(jìn)制位;如果是有符號(hào)的,則在左側(cè)插入一個(gè)有符號(hào)位的副本或一個(gè)值為0的二進(jìn)制位,具體取決于特定的環(huán)境。
“無(wú)符號(hào)右移”怎么用?
另一方面,對(duì)于無(wú)符號(hào)數(shù)據(jù),右移必須是邏輯的。有符號(hào)數(shù)需要考慮正數(shù)和負(fù)數(shù)的情況,其算術(shù)右移需要在左端對(duì)原始符號(hào)位(最高位)進(jìn)行補(bǔ)充;無(wú)符號(hào)數(shù)沒(méi)有符號(hào)位,其右移運(yùn)算總是在左端對(duì)零進(jìn)行補(bǔ)充。因此,對(duì)于無(wú)符號(hào)數(shù)不存在所謂的“算術(shù)右移運(yùn)算”,必須使用左端為零的“邏輯右移運(yùn)算”。
默認(rèn)情況下,Python的整數(shù)是無(wú)限寬的大整數(shù)。
正整數(shù)不需要無(wú)符號(hào)右移。
只有負(fù)整數(shù)需要無(wú)符號(hào)右移。
此時(shí),我們應(yīng)該首先考慮為什么會(huì)得到負(fù)整數(shù)。一般來(lái)說(shuō),輸入數(shù)據(jù)有問(wèn)題。最好直接輸入正整數(shù)。
如果真的要處理負(fù)整數(shù),可以先處理結(jié)構(gòu)包轉(zhuǎn)換為指定的寬度字節(jié),然后解包為所需的正數(shù),然后右移。