![](/img/trans.png)
[英]How can I multiply a 64-bit unsigned int with a 32-bit unsigned int on C without using long long?
[英]How to assign an int to unsigned long using C?
我正在使用C語言。 有一個名為“ npu_session_total”的函數。 然后,我將使用此func的返回值,並將其分配給一個無符號的長變量“ accelerated_count”。
int npu_session_total(void)
{
// this will return an int
return atomic_read(&npu_session_count);
}
........
unsigned long accelerated_count = npu_session_total();
這會引起任何問題嗎? 我該怎么做演員?
謝謝!
可以像OP一樣簡單地將int
分配給unsigned long
。 它在C中定義良好。當some_int_value >= 0
,它將始終保持不變,成為unsigned long
。
INT_MAX <= UINT_MAX <= ULONG_MAX
就像OP一樣,不需要強制轉換,遮罩或數學運算。
unsigned long some_unsigned_long_object = some_int_value;
訣竅是當some_int_value < 0
。 保存的值將為some_int_value + ULONG_MAX + 1
。 @AnT現在可以使用OP的代碼了嗎? 也許不是。
較安全的轉換會首先測試否定性。
int session_total = npu_session_total();
if (session_total < 0) {
Handle_Negative_Case(session_total);
}
else {
unsigned long accelerated_count = npu_session_total();
...
}
@OP注釋int
值永遠不應為負。 防御性編碼仍將檢測負值並進行處理。 也許是一個簡單的錯誤消息並退出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.