![](/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.