>>importarray>>>numbers=array.array('h',[-2,-1,0,1,2])>>>memv=memoryview(numbers)>>>len(memv)5>>>memv[0]-2>>>memv_oct=memv." />

欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

《Fluent Python》---一個(gè)關(guān)于memoryview例子的理解過(guò)程

系統(tǒng) 1782 0

近日,在閱讀《Fluent Python》的第2.9.2節(jié)時(shí),有一個(gè)關(guān)于內(nèi)存視圖的例子,當(dāng)時(shí)看的一知半解,后來(lái)查了一些資料,現(xiàn)在總結(jié)一下,以備后續(xù)查詢;

示例復(fù)述

添加了一些額外的代碼,便于更好理解 memoryview

          
            >>> import array
>>> numbers = array.array('h', [-2, -1, 0, 1, 2])
>>> memv = memoryview(numbers)
>>> len(memv)
5
>>> memv[0]
-2
>>> memv_oct = memv.cast('B')
>>> memv_oct

            
              
>>> memv_oct.tolist()
[254, 255, 255, 255, 0, 0, 1, 0, 2, 0]
>>> memv.tolist()
[-2, -1, 0, 1, 2]
>>> memv_oct[5] = 4
>>> numbers
array('h', [-2, -1, 1024, 1, 2])
>>> memv.tolist()
[-2, -1, 1024, 1, 2]
>>> memv_oct.tolist()
[254, 255, 255, 255, 0, 4, 1, 0, 2, 0]
            
          
        

我的理解和疑惑

  • nembers 是一個(gè) signed short int 類型的數(shù)組;
  • memv 是使用上述數(shù)組創(chuàng)建的一個(gè)memoryview,即 內(nèi)存視圖 ,它使 memv 能夠共享 nembers 數(shù)組的內(nèi)存,但不需要復(fù)制里面的內(nèi)容,這使得 memv 也能夠訪問(wèn)和操作 numbers 數(shù)組的元素; memv[0] # -2 也就可以理解了。
  • memv.cast('B') memv 轉(zhuǎn)換成一個(gè) unsigned char int 的新 memoryview ,并返回給 memv_oct
  • memv_oct.tolist() 的元素比原始數(shù)組多了一倍:
    • signed short int在內(nèi)存中是以2個(gè)字節(jié)存儲(chǔ),而 unsigned char int 在內(nèi)存中則是1個(gè)字節(jié)存儲(chǔ)。
    • memv.tolist() numbers 的內(nèi)容還是一樣的,所以 memoryview 只是換個(gè)角度看同一個(gè)事物,即所謂的 橫看成嶺側(cè)成峰,遠(yuǎn)近高低各不同
    • 至此,我有一個(gè)不理解的地方:為什么 signed short int 類型的 -2 轉(zhuǎn)換成 unsigned char int 類型時(shí),變成 254 255
  • memv_oct[5] = 4 signed short int 類型的 0 的高字節(jié)賦值成 4 ;在二進(jìn)制的層面下看,即 0000 0000 0000 0000 轉(zhuǎn)換成了 0000 0000 0010 0000 ,十進(jìn)制也就是1024;
  • 同時(shí),我們也可以看到 memv.tolist() 也隨著 numbers 改變了。更能說(shuō)明 memoryview 只是對(duì)同一塊數(shù)據(jù)的進(jìn)行不同形式的表達(dá);

解惑

正整數(shù)的情況可以理解,負(fù)整數(shù)的情況就理解不了,這說(shuō)明正負(fù)整數(shù)在內(nèi)存中的存儲(chǔ)形式是不一樣的。有了方向我們就直接搜一下吧。

  • signed short int 類型的 原碼 最高位表示正負(fù), 0 代表正數(shù), 1 代表負(fù)數(shù)。
  • 它們內(nèi)存中是以補(bǔ)碼的形式存儲(chǔ)的,其中正數(shù)的補(bǔ)碼和原碼相同;負(fù)數(shù)的補(bǔ)碼,是其原碼除符號(hào)位(即最高位)外,其余全部取反,再加1;
  • signed short int 類型的 -2 ,其原碼為 0100 0000 0000 0001 ,除符號(hào)位取反,為 1011 1111 1111 1111 ,再加1,為 0111 1111 1111 1111 。當(dāng)以 unsigned char int 類型讀出來(lái)的時(shí)候,就成了 254 255 了; -1 亦是同理,即 255 255

總結(jié)

其實(shí)這都是《計(jì)算機(jī)組成原理》的基本知識(shí),只是當(dāng)我們習(xí)慣了使用一些高級(jí)編程語(yǔ)言的時(shí)候,對(duì)于這些底層的東西就不那么敏感了。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 久草视频精品 | 欧美性猛交一区二区三区精品 | 成人免费午夜性视频 | 国产精品成人在线 | 亚洲欧美一区二区三区久本道 | 成人嘿嘿视频网站在线 | 成人午夜精品一区二区三区 | 午夜视频在线 | 国产一区二区三区日韩欧美 | 色黄网站在线观看 | 91亚洲精品丁香在线观看 | 国产精品三级在线 | 亚洲午夜av | 国产福利在线永久视频 | 视频在线观看一区二区 | 亚洲熟妇毛茸茸 | 欧美一区二区精品 | 成人毛片视频在线播放 | 国产porn在线 | 国产免费视频 | 欧美高清69hd| 美日韩一区二区三区 | 欧美金妇欧美乱妇视频 | 天天人人 | 亚洲黄色一级大片 | 亚洲高清一区二区三区 | 午夜影库 | 日韩中文有码高清 | 欧美一区二区在线免费观看 | 亚洲精品麻豆 | 色噜噜狠狠先锋影音久久 | 成人永久福利在线观看不卡 | 国产在线观看福利 | 短视频网站免费观看 | 久在线播放 | 亚洲综合色丁香婷婷六月图片 | 激情五月色播五月 | 午夜在线观看视频 | 色吧首页dvd | 粉色视频高清大全免费观看1 | 就去色综合 |