簡體   English   中英

如何使用C將int分配給unsigned 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM