[英]C++: strange division output
我有以下代碼:
int x = arr[arr.size() -1] - arr[0];
int n = arr.size();
int dx = x/n;
int dy = (arr[arr.size() -1] - arr[0])/arr.size();
std::cout << dx << " " << dy << std::endl;
當我的arr = [15, 13, 12]
,我得到dx = -1
,但dy = 1431655764
( arr is vector<int>
)
為什么dx
和dy
不同? 謝謝!
為什么
dx
和dy
不同?
對於dy
,請注意std::vector::size
的返回類型是std::vector::size_type
,它是一個無符號整數類型。 然后(arr[arr.size() -1] - arr[0])/arr.size()
也是無符號的。 結果溢出,然后分配給int
類型的dy
。
無符號整數算術總是以2 n為模執行,其中 n 是該特定整數中的位數。 例如,用於
unsigned int
,加入一種至UINT_MAX
給出0
,並從一個減去0
給出UINT_MAX
。
對於dx
, arr.size()
首先分配給n
(其類型為int
),然后計算為x/n
,其結果也是int
。 然后將結果分配給dx
一切正常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.