Python OpenCV/NumPy:为什么 np.uint8([255]) + np.uint8([255]) 给出结果 254 而不是 255?
Python OpenCV/NumPy: why np.uint8([255]) + np.uint8([255]) is giving result 254 instead of 255?
import numpy as np
a = np.uint8([255])
b = np.uint8([255])
print(a+b)
结果: array([254], dtype=uint8)
uint8可以保存范围0..255.
所以你写的例子 np.uint8([256])
-> array([0], dtype=uint8)
你的情况a+b=np.uint8([510])=np.uint8([510-256])=np.uint8([254])
uint8
是一个无符号整数,用 8 位表示。您可以使用 8 位表示的数字范围是 [0, 255].
255在8位二进制中是1111 1111.
将 1111 1111 与 1111 1111 相加,得到 1 1111 1110 (= 510)。但是由于你只有8位来表示(因为你用的是uint8
),所以结果中最左边的1无法存储,渲染结果为1111 1110,也就是254.
import numpy as np
a = np.uint8([255])
b = np.uint8([255])
print(a+b)
结果: array([254], dtype=uint8)
uint8可以保存范围0..255.
所以你写的例子 np.uint8([256])
-> array([0], dtype=uint8)
你的情况a+b=np.uint8([510])=np.uint8([510-256])=np.uint8([254])
uint8
是一个无符号整数,用 8 位表示。您可以使用 8 位表示的数字范围是 [0, 255].
255在8位二进制中是1111 1111.
将 1111 1111 与 1111 1111 相加,得到 1 1111 1110 (= 510)。但是由于你只有8位来表示(因为你用的是uint8
),所以结果中最左边的1无法存储,渲染结果为1111 1110,也就是254.