python的int類型專題及常見問題 - CSDN

2021-01-15 CSDN技術社區

在以前的Python2中,整型分為int和long,也就是整型和長整型, 長整型不存在溢出問題, 即可以存放任意大小的數值,理論支持無限大數字。

因此在Python3 中,統一使用長整型,用int表示,在Python3中不存在long,只有int。

這個長整形int結構其實也很簡單, 在 longintepr.h 中定義:

struct _longobject {

PyObject_VAR_HEAD

digit ob_digit[1];

};

ob_digit 它是一個數組指針。digit 可認為是 int 的別名.

即長整型在Python內部是用一個int數組(digit ob_digit[n])保存值的. 待存儲的數值的低位信息放於低位下標, 高位信息放於高下標.比如要保存 112233445566778899 很長,但我們的int只能保存6位(假設):

那麼python就會這樣存儲:

ob_digit[0] = 778899;

ob_digit[1] = 445566;

ob_digit[2] = 112233;

低位存於低索引下,高位位於高索引下。而正負符號信息由ob_size保存, 像上面的例子中對象元素個數是3, 那麼ob_size = 3 而如果表示數是負數的, 那麼 ob_size = -3

python中整型結構中的數組,每個元素最大存儲 15 位的二進位數(不同位數作業系統有差異32位系統存15位,64位系統是30位)。

如64位系統最大存儲30位的二進位數,即存儲的最大十進位數是 2^30-1 = 1073741823,也就是說上面例子中數組一個元素存儲的最大值是1073741823。

那麼存儲數字 10737418231 其實是:

ob_digit[0] = 1;

ob_digit[1] = 1073741823;

需要注意的是,實際存儲是以二進位形式存儲,而非我們所寫的十進位。

十進位:1073741823 = 二進位:11111...11111(30位) 存儲在高索引 1

十進位:1 = 二進位:00000...000001(30位) 存儲在低索引 0

1 ~ 2^30-1 需要一個數組元素存放

2^30 ~ 2^60-1 需要兩個數組元素存放

以此類推……

通過代碼來看:

import sys

print("2^30 = {}\n2^60 = {}".format(1024*1024*1024, 1024*1024*1024*1024*1024*1024))

print("0, 1, 2^30-1, 2^30, 2^60-1 的字節大小: ",sys.getsizeof(0), sys.getsizeof(1), sys.getsizeof(1073741823), sys.getsizeof(1073741824), sys.getsizeof(1152921504606846975))

結果如下:

2^30 = 1073741824

2^60 = 1152921504606846976

數字 0, 1, 2^30-1, 2^30, 2^60-1,2^60 的字節大小: 24 28 28 32 32 36

由於Python中的int有一個基礎內存佔用(也就是長整形結構中PyObject_VAR_HEAD佔用內存的大小,24位元組),因此數字 1 ~ 2^30-1 內存大小是28位元組,2^30 ~ 2^60-1 內存大小是32位元組,這裡需要注意的是 0 佔用的內存大小是24位元組而非28位元組!

一個數組元素的所用內存大小是4位元組即32位,但其實存儲數字的有效位是30位(64位系統中),少的兩位去哪了???

實際存儲只用了30位的原因是:指數運算中要求位移量得是 5 的倍數,可能是某種優化算法。

相關焦點

  • python 卡方專題及常見問題 - CSDN
    其根本思想就是在於比較理論頻數和實際頻數的吻合程度或擬合優度問題。(更多參考:卡方檢驗、卡方分布) 不講過多理論,主要使用 python 實現卡方驗證。之前對於元素/特徵/屬性 異常值的選擇情況,可以使用直方圖、箱型圖、Z分數法等篩選。
  • python卡方分析專題及常見問題 - CSDN
    其根本思想就是在於比較理論頻數和實際頻數的吻合程度或擬合優度問題。(更多參考:卡方檢驗、卡方分布) 不講過多理論,主要使用 python 實現卡方驗證。之前對於元素/特徵/屬性 異常值的選擇情況,可以使用直方圖、箱型圖、Z分數法等篩選。
  • mysql 矩陣類型專題及常見問題 - CSDN
    列:一列包含了相同類型的數據。行:一行是一組相關的數據。主鍵:主鍵是唯一的,可以由一列或者多列構成關鍵字。外鍵:外鍵是用於關聯兩個表。資料庫類型類型大小用途AUTO_INCREMENT, 列名 列類型 not null, PRIMART KEY(列名))ENGINE=InnoDB DEFAULT CHARSET=utf8;### 判斷表是否存在,不存在則創建create table if not exists 表名(列名 列類型 AUTO_INCREMENT,列名 列類型 not null,PRIMARR KEY('列名'))ENGINE
  • python的內置函數:int()轉換成整型
    前言在Java中有強制類型轉換,我們可以利用Integer.parseInt()將一個對象轉換成int類型。在python中是利用內置函數int()來將一個對象轉換成整型。python的內置函數int的使用1.內置函數int()語法classint(x,base=10),其中x為一個字符串或數字,base來表示x是以什麼進位的數據來表示的。x數字參數可以是整數、浮點數(小數點表示和指數e表示皆可), 字符串參數僅能包含在指定進位下所涵蓋的字符,該參數可省略。
  • 卡方檢驗結果分析專題及常見問題 - CSDN
    簡單統計之後,得到總數和死亡率:此處需要使用到ggbarstats函數,其參數可謂是非常的多,詳細的參數表我放在另一個博客中了,有興趣的朋友可以去看看(https://blog.csdn.net/m0_45248682/article/details/104086729)。
  • python一元線性回歸分析專題及常見問題 - CSDN
    python多重線性回歸分析多重線性回歸分析定義多重線性回歸模型:Mulitiple Linear Regression多元線性回歸模型:MultivariateLinear Regression數據準備#多重線性回歸#數據準備import pandas as pddf=pd.read_csv('e:/python/out/corr.csv',encoding='utf8')df根據預測目標,確定自變量和因變量#多重線性回歸
  • c++ 槽函數專題及常見問題 - CSDN
    第一個模板參數Signature的含義和function相同,也是一個函數類型,表示signal調用的函數(槽,事件處理handler),例如:signal<void(int, double)> sig
  • python 卡方檢驗專題及常見問題 - CSDN
    1、先用python展示如何進行卡方檢驗,用上面所舉的例子。# python3.6 import numpy as npfrom scipy.stats import chi2_contingencycontingency_table = np.array([[631,364,582], [154,55,45]])Chi2, P, degree_of_freedom, contingency_table0
  • 「python學習手冊-筆記」003.數值類型
    ,python的數字類型還包括布爾類型.這是由於浮點數是有限的比特位數,導致無法精確的表示某些數值.這個問題不僅在python中存在,在其他語言中同樣存在. 不過python有分數和小數,可以很好的規避這些問題. 畢竟python適合科學計算的特性不是白來的.python中的除法python中有三種風格的除法和兩種除法運算符.
  • python時間序列平穩性檢驗專題及常見問題 - CSDN
    在做時間序列分析時,我們經常要對時間序列進行平穩性檢驗,而我們常用的軟體是SPSS或SAS,但實際上python也可以用來做平穩性檢驗,而且效果也非常好,今天筆者就講解一下如何用python來做時間序列的平穩性檢驗。首先我們還是來簡單介紹一下平穩性檢驗的相關概念。圖1.
  • android啟動頁設計專題及常見問題 - CSDN
    轉載請註明出處:http://blog.csdn.net/wangjihuanghun/article/details/63255144啟動頁幾乎成為了每個app的標配,有些商家在啟動頁中增加了開屏廣告以此帶來更多的收入。
  • Python基礎學習之常用六大數據類型
    剛開始學習一門程式語言,除了了解運行環境與語言類型之外,最基本還是從該語言的基本數據類型開始學起。Python六大常用數據類型: int 整數 float 浮點數 str 字符串 list 列表 tuple 元組 dict 字典講解這些先說一下python中的變量與變量名。
  • 不懂NumPy 算什麼 Python 程式設計師?|CSDN 博文精選
    list VS ndarraynumpy 的核心是 ndarray 對象(numpy 數組),它封裝了 python 原生的同數據類型的 n 維數組(python 數組)。numpy 數組和 python 數組之間有幾個重要的區別:numpy 數組一旦創建,其元素數量就不能再改變了。增刪 ndarray 元素的操作,意味著創建一個新數組並刪除原來的數組。
  • python平穩性檢驗專題及常見問題 - CSDN
    timeseries是待輸入的時間序列,是pandas.Series類型,max_ar、max_ma是p、q值的最大備選值。order.bic_min_order返回以BIC準則確定的階數,是一個tuple類型返回值如下:order.bic_min_orderOut[13]: (1, 0)5、建模從上述結果中可以看到,可以選擇AR(1)模型################################模型#########
  • clicked信號 qt 發送者專題及常見問題 - CSDN
    r = 0; r < 4; r++) { for (int c = 0; c < 5; c++) { grid->addWidget(new LCDRange(this), r, c); } } layout->addWidget(quit); layout->addLayout(grid); setLayout(layout);}int main(int
  • Python編程常見問題與解答
    答:如果是Windows系統的話,可以使用瀏覽器打開https://www.lfd.uci.edu/~gohlke/pythonlibs/下載合適版本的whl文件,然後離線安裝。19.問:已知x是一個字符,我想使用x+1得到下一個字符,為什麼提示「TypeError: can only concatenate str (not "int") to str」呢?答:Python不支持字符和整數相加,如果想得到下一個字符,可以使用表達式chr(ord(x)+1)。
  • arduino定位專題及常見問題 - CSDN
    姿態解算代碼#include "Wire.h"#include "I2Cdev.h"unsigned long now, lastTime = 0;float dt; //微分時間int16
  • arduino設置串口模式專題及常見問題 - CSDN
    value:2個值LOW:輸出低電平HIGH:輸出高電平3、GPIO數字輸入int digitalRead(pin)作用:讀取一個數字輸入引腳的電平值。返回:HIGH(高電平)或者LOW(低電平)。返回值:返回串口緩存中第一個可讀字節,當沒有可讀數據時返回-1,整數類型。
  • android藍牙相關框架專題及常見問題 - CSDN
    3.1、BluetoothAdapter詳細介紹(client)BluetoothAdapter部分主要是api使用,所以這部分以表格方式列出信息方便查閱第一個表是BluetoothAdapter定義的一些狀態和通知:作用類型關鍵字介紹開關通知ACTION_STATE_CHANGED上次狀態和當前狀態開關狀態定義AdapterState
  • python while循環、數據類型
    alien_2 = {'color': 'red', 'points': 15}aliens = [alien_0, alien_1, alien_2]for alien in aliens:print(alien) 6、在字典裡嵌套列表列如:favorite_languages = {'jen': ['python