我是否应该在每次知道我正在处理无符号值时使用"unsigned"?
Should I use "unsigned" every time i know I'm processing unsigned values?
通常已知值为正。例如,TCP/UDP序列号总是正值。int
和unsigned int
都足够大,可以存储最大的sequence number
,所以我可以使用这些类型中的任何一种。还有许多已知值为正的例子。
当常规signed
型容量足够时,是否有理由使用unsigned
型?
我个人倾向于使用常规类型,因为:
-
int
可能比uint
或unsigned int
更具可读性 - 我不需要包括额外的标题
UINT
等 - 我将避免在程序的其他地方额外的强制类型转换
使用unsigned
类型的原因我可以想象:
- 帮助编译器生成更好的代码?
- 帮助另一个程序员理解变量是无符号的
- 避免可能的bug(例如,当int被赋值为UINT时编译器可能会产生编译时错误,我们应该检查我们分配的值不是负的)
原因之一是比较有符号数和无符号数可能会导致令人惊讶的结果。在C和(我认为)c++中,比较有符号数和无符号数会导致有符号数被解释为无符号数。如果带符号的值恰好是负的,那么将其读取为unsigned将得到一个比任何无符号数都大的值,这不是您想要的。这个问题在Objective-C中有一个例子,它使用与c相同的转换规则。
相关文章:
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 将无符号char*转换为std::istream*C++
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- C++中无符号字符溢出
- 使用无符号字符数组有效存储内存
- 如何打印boost多精度128位无符号整数
- C++模板函数,用于比较任何无符号整数和有符号整数
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 获取隐式转换溢出从无符号到已签名的警告
- 如何在保持其值的同时将 c++ 无符号字符变量转换为 char 变量
- 从 std::vector<无符号字符>切片中提取 int?
- 是什么导致了这种使用三进制而不是短整型的有符号int到无符号int转换
- 将数据从 vector<unsigned char> 传输到无符号 char[]
- 如何修复此 OpenCV 错误:断言失败((无符号)i < (无符号)cn) 在 cv::Vec<unsigned char,3>:::运算符 (), 文件
- 将无符号 int *' 转换为 'unsigned int *&
- 错误:从 'short unsigned int*' 到"短无符号 int"的转换无效|(在 C++ 中)
- "无符号长整型"和'unsigned long long int'赋值问题
- 我是否应该在每次知道我正在处理无符号值时使用"unsigned"?