iT邦幫忙

2022 iThome 鐵人賽

DAY 7
0

今天來了解一下 Python 整數的小知識和運算。

整數也是一種物件,屬於 int 型別。一個整數佔多少記憶體?

import sys

print('size of 0:', sys.getsizeof(0))
print('size of 1:', sys.getsizeof(1))
size of 0: 24
size of 1: 28

觀察上述程式碼,可以發現整數 0 物件基本就要佔據 24 bytes,可說是一個整數物件的最低「成本」。

整數 1 呢?佔據 28 bytes,比整數 0 多了四個 byte。

整數越大,所佔記憶體也越大。

print('size of 2**32:', sys.getsizeof(2**32))
size of 2**32: 32

整數的加、減、乘運算都還是整數:

print(type(1+2))
print(type(1-2))
print(type(1*2))
<class 'int'>
<class 'int'>
<class 'int'>

除法比較特別,會變成浮點數(float):

print(type(2/1))
<class 'float'>

math.floor 的誤區

我們常用到一種運算:捨去浮點數的小數點取整數。

a // b

import math
math.floor(a / b)

這在正數運算時沒問題:

from math import floor
print(floor(2.5))
2

但小心!遇到負數可能跟你想的不同:

print(floor(-2.5))
-3

不是 -2 是 -3,這是怎麼回事?

要方便理解這個現象,我們可以這樣記:以下的恆等式永遠成立

A = floor(A / B) * B + A % B

我們分別用正數和負數來驗證這個恆等式:

7 == floor(7 / 3) * 3 + (7) % 3
True
-7 == floor(-7 / 3) * 3 + (-7) % 3
True

可發現上述負數運算時,floor(-7/3) 值是 -3, (-7) % 3 值是 2!

-7 = -2 * 3 + 2

其實英文的 floor 是「地板」的意思,代表取小於或等於該數字的整數。

檢查看看是不是取「地板」:

print(floor(2.5))
print(floor(-2.5))
2
-3

明天我們就來用今天學到的恆等式,自己來發明一個N進位計算機!很酷的,明天見~

參考:Python 3: Deep Dive (Part 1 - Functional)


上一篇
Python內建的提升效能機制(二)
下一篇
# Python 裡的整數——實作N進位演算法
系列文
小青蛇變大蟒蛇——進階Python學起來!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言