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

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

《Fluent Python》---一個關于memoryview例子的理解過程

系統 1698 0

近日,在閱讀《Fluent Python》的第2.9.2節時,有一個關于內存視圖的例子,當時看的一知半解,后來查了一些資料,現在總結一下,以備后續查詢;

示例復述

添加了一些額外的代碼,便于更好理解 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 是一個 signed short int 類型的數組;
  • memv 是使用上述數組創建的一個memoryview,即 內存視圖 ,它使 memv 能夠共享 nembers 數組的內存,但不需要復制里面的內容,這使得 memv 也能夠訪問和操作 numbers 數組的元素; memv[0] # -2 也就可以理解了。
  • memv.cast('B') memv 轉換成一個 unsigned char int 的新 memoryview ,并返回給 memv_oct
  • memv_oct.tolist() 的元素比原始數組多了一倍:
    • signed short int在內存中是以2個字節存儲,而 unsigned char int 在內存中則是1個字節存儲。
    • memv.tolist() numbers 的內容還是一樣的,所以 memoryview 只是換個角度看同一個事物,即所謂的 橫看成嶺側成峰,遠近高低各不同
    • 至此,我有一個不理解的地方:為什么 signed short int 類型的 -2 轉換成 unsigned char int 類型時,變成 254 255
  • memv_oct[5] = 4 signed short int 類型的 0 的高字節賦值成 4 ;在二進制的層面下看,即 0000 0000 0000 0000 轉換成了 0000 0000 0010 0000 ,十進制也就是1024;
  • 同時,我們也可以看到 memv.tolist() 也隨著 numbers 改變了。更能說明 memoryview 只是對同一塊數據的進行不同形式的表達;

解惑

正整數的情況可以理解,負整數的情況就理解不了,這說明正負整數在內存中的存儲形式是不一樣的。有了方向我們就直接搜一下吧。

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

總結

其實這都是《計算機組成原理》的基本知識,只是當我們習慣了使用一些高級編程語言的時候,對于這些底層的東西就不那么敏感了。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 尤物精品视频在线观看 | 天天射夜夜操 | 亚洲成在人天堂一区二区 | 欧美做爱毛片 | 国产欧美日韩免费一区二区 | 一区不卡在线观看 | 国产视频在线观看福利 | 99视频精品国在线视频艾草 | 中国漂亮护士一级毛片 | 超乳w真性中出し冲田杏梨101 | 欧美精品久久久久久久免费观看 | 夜夜摸夜夜操 | 日本精品久久久久中文字幕 | 欧美aⅴ在线| 亚洲欧洲日产国码二区首页 | 97香蕉久久夜色精品国产 | 亚洲一区二区三区高清网 | 男女拍拍视频黄的全免费 | 久久99国产综合色 | 波多野一区二区三区在线 | 天天色天天综合网 | 亚洲综合色dddd26 | 日b黄色| 在线成人中文字幕 | 久久98精品久久久久久婷婷 | 国产欧美久久一区二区 | 欧美日韩国产三级 | 91精品国产福利在线观看性色 | 天天操穴 | 久视频在线 | 在线视频久久 | 亚洲高清在线观看视频 | 亚洲国产成人资源在线桃色 | 色综合综合网 | 性夜黄a爽爽免费视频国产 性夜影院爽黄a爽免费看网站 | 日本 a| 一区二区三区精品国产欧美 | 精品国产日韩亚洲一区在线 | 国产精品成人观看视频网站 | 九九热免费在线观看 | 欧美精品亚洲精品日韩专 |