第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Go Varint 返回一半的預(yù)期值

Go Varint 返回一半的預(yù)期值

Go
幕布斯7119047 2021-09-13 09:47:51
為什么這段代碼的輸出是:package mainimport (    "fmt"    "encoding/binary")func main() {    var myByte byte = 18    array := []byte{myByte}    val, n := binary.Varint(array)    fmt.Printf("value: %d, num bytes: %d\n", val, n)}value: 9, num bytes: 1 代替 value: 18, num bytes: 1它可能與二進(jìn)制補(bǔ)碼有關(guān),但我不知道如何。
查看完整描述

2 回答

?
暮色呼如

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超9個(gè)贊

使用該Uvarint方法正確解碼無(wú)符號(hào)字節(jié) .. 這是byte默認(rèn)情況下的 a 。


字節(jié)以無(wú)符號(hào)形式存儲(chǔ)(因?yàn)槟J(rèn)情況下字節(jié)是無(wú)符號(hào)的 -uint8在大多數(shù)語(yǔ)言中它是..的別名)。


當(dāng)您解碼數(shù)字時(shí),您正在調(diào)用binary.Varint.. 解碼一個(gè)帶符號(hào)的數(shù)字。由于符號(hào)位,這會(huì)導(dǎo)致數(shù)字不正確。


使用binary.Uvarint.. 即解碼一個(gè)無(wú)符號(hào)數(shù),你會(huì)得到正確的結(jié)果:


val, n := binary.Uvarint(array) // val = 18, n = 1

擴(kuò)展示例:

讓我們看看你的數(shù)字 - 18。在二進(jìn)制中,它是這樣的:


00010010

該binary.Varint功能是以下:


func Varint(buf []byte) (int64, int) {

    ux, n := Uvarint(buf) // ok to continue in presence of error

    x := int64(ux >> 1)

    if ux&1 != 0 {

        x = ^x

    }

    return x, n

}

基本上,它首先會(huì)獲取您提供的內(nèi)容的無(wú)符號(hào)值:18。


然后它將所有字節(jié)移動(dòng) 1。這導(dǎo)致:


00001001

那是 的二進(jìn)制表示9。注意符號(hào)位仍然是 0 - 這意味著一個(gè)正數(shù)。然后,它通過(guò)將原始值 ( 18) 與進(jìn)行按位與運(yùn)算來(lái)檢查是否反轉(zhuǎn)結(jié)果1。這樣做是因?yàn)椋凇拔抑肋@個(gè)數(shù)字是有符號(hào)的”上下文中運(yùn)行 - 這就是該函數(shù)存在的原因:


00010010

00000001

--------

00000000

     = 0

那時(shí),零確實(shí)等于零——因此該方法返回x——即 9。


讓我們?cè)囋?1

使用 1 作為輸入:


00000001

右移:


00000000

AND原始數(shù)字 (1)與 1:


00000001

00000001

--------

     = 1

此時(shí),結(jié)果不等于零..所以結(jié)果反轉(zhuǎn):


11111111

這是-1(注意符號(hào)位現(xiàn)在是 1 .. 表示負(fù)數(shù))的有符號(hào)表示。


查看完整回答
反對(duì) 回復(fù) 2021-09-13
  • 2 回答
  • 0 關(guān)注
  • 159 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)