有符号与无符号整数的长度/计数 - c#

为了表示长度或计数变量,是否最好使用有符号的无符号的整数?
在我看来,C++ STL倾向于使用无符号(std::size_t,就像在std::vector::size()中一样,相反,C#BCL倾向于青睐带符号的整数(例如在ICollection.Count中。
考虑到长度或计数是非负整数,我的直觉将选择unsigned;但是我不明白为什么.NET设计人员选择带符号的整数。
最好的方法是什么?每个优点和缺点是什么?

参考方案

C++使用无符号值,因为它们需要完整范围。在32位系统上,该语言应使其具有4 GB的向量,而不仅仅是2 GB的向量。 (操作系统可能不允许您使用全部4 GB的空间,但是语言本身并不想妨碍您使用)

在.NET中,无符号整数不符合CLS。您可以使用它们(在某些.NET语言中),但是它限制了可移植性和兼容性。因此,对于基类库,它们仅使用带符号的整数。

但是,这些都是极端情况。在大多数情况下,签名的int足够大。
因此,只要两者都提供您需要的范围,就可以同时使用。

有符号整数有时具有的一个优点是,它们使检测下溢更加容易。假设您正在计算数组索引,并且由于某些错误的输入或程序中的逻辑错误,您最终将尝试访问索引-1

使用带符号的整数,很容易检测到。使用unsigned,它将环绕并变成UINT_MAX。这使检测错误变得更加困难,因为您期望一个正数,并且得到一个正数。

真的,这取决于。 C++使用无符号,因为它需要范围。 .NET使用带符号的,因为它需要使用未带符号的语言。

在大多数情况下,这两种方法都可以使用,有时,签名也可以使您的代码更可靠地检测错误。

LeetCode题解计算机为什么是基于二进制的?

可以是三进制么?二进制有什么好处?题解:为什么叫电子计算机?算盘应该没有二进制

LeetCode题解统计城市的所有灯泡

这个是我刚毕业的时候,一个真实的面试题,这是一个开放题。题目描述:想办法,将一个城市的所有灯泡数量统计出来。题解:费米估算法1、如果某个城市常驻人口有1000万2、假设每5人居住在一套房里,每套房有灯泡5只,那么住宅灯泡共有1000万只3、假设公众场所每10人共享一只灯泡,那么共有100万只4、主要的这两者相加就得出了1100万只当然实际上这是估算的,具体应…

LeetCode题解黑白圆盘

一个圆盘被涂上了黑白二色,两种颜色各占一个半圆。圆盘以一个未知的速度、按一个未知的方向旋转。你有一种特殊的相机可以让你即时观察到圆上的一个点的颜色。你需要多少个相机才能确定圆盘旋转的方向?题解:可以用一个相机即可

LeetCode题解圆上任取三点构成锐角三角形的概率

来自字节跳动的一道几何题题解:1/4

LeetCode题解深度优先遍历和回溯的关系?

深度优先遍历的范围更大还是回溯的范围更大?为什么?题解:我的理解是:dfs是回溯思想的一种体现- 回溯:是在整个搜索空间中搜索出可行解,在搜索过程中不断剪枝回退,这是回溯的思想,这个搜索空间并没有限制于特定的数据结构。- dfs:dfs是指特定的数据结构中如图,树(特殊的图)中搜索答案,范围限制在了特定的数据结构。个人拙见。