为什么是Array.Lengthint,而不是uint.这让我感到困扰(只是一点点),因为长度值永远不会是负数.
这也迫使我在我自己的类上使用int作为length-property,因为当你指定一个int值时,这需要显式地转换...
所以最终的问题是:对于unsigned int(uint)有什么用?甚至微软似乎也没有使用它们.
有什么区别uint和unsigned int?我正在寻找网站,但所有问题都是指C#或C++.我想要一个关于C的答案.
请注意,我在Linux下使用GCC.
如何uint在C++中获得unix时间戳?我用Google搜索了一下,似乎大多数方法都在寻找更复杂的方式来表示时间.我不能把它作为一个uint?
以下是c#代码:
static void Main(string[] args)
{
uint y = 12;
int x = -2;
if (x > y)
Console.WriteLine("x is greater");
else
Console.WriteLine("y is greater");
}
Run Code Online (Sandbox Code Playgroud)
这是c ++代码:
int _tmain(int argc, _TCHAR* argv[])
{
unsigned int y = 12;
int x = -2;
if(x>y)
printf("x is greater");
else
printf("y is greater");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
两者都给出了不同的结果.我错过了什么基本的东西?任何的想法?
大家好我想用printf进行调试.但我不知道如何打印"out"变量.
在返回之前,我想打印此值,但其类型为void*.
int
hexstr2raw(char *in, void *out) {
char c;
uint32_t i = 0;
uint8_t *b = (uint8_t*) out;
while ((c = in[i]) != '\0') {
uint8_t v;
if (c >= '0' && c <= '9') {
v = c - '0';
} else if (c >= 'A' && c <= 'F') {
v = 10 + c - 'A';
} else if (c >= 'a' || c <= 'f') {
v = 10 + c - 'a';
} else …Run Code Online (Sandbox Code Playgroud) 我需要生成范围的随机数byte,ushort,sbyte,short,int,和uint.我能够使用C#中的Random方法生成所有这些类型(例如values.Add((int)(random.Next(int.MinValue + 3, int.MaxValue - 2)));),除了uint,因为Random.Next只接受int值.
是否有一种简单的方法来生成随机uint?
当然,我知道无符号整数(uint)和有符号整数()之间的基本区别int.
我注意到在.NET公共类中,一个被调用的属性Length总是使用有符号整数.
也许这是因为无符号整数不符合CLS.
但是,例如,在我的静态函数中:
public static double GetDistributionDispersion(int tokens, int[] positions)
Run Code Online (Sandbox Code Playgroud)
参数tokens和所有元素positions都不能为负数.如果它是否定的,最终结果是无用的.因此,如果我同时使用intfor tokens和positions,我必须在每次调用此函数时检查值(如果发现负值,则返回非感知值或抛出异常),这很乏味.
好的,那么我们应该使用uint两个参数.这对我来说真的很有意义.
然而,我发现,在许多公共API中,它们几乎总是在使用int.这是否意味着在他们的实现中,他们总是检查每个值的负面(如果它应该是非负的)?
总而言之,我该怎么办?
我可以提供两种情况:
我们应该对这两种情况使用不同的方案吗?
彼得
PS:我做了很多研究,仍然没有理由说服我不要使用uint:-)
我一直在https://dotnetfiddle.net/测试此代码:
using System;
public class Program
{
const float scale = 64 * 1024;
public static void Main()
{
Console.WriteLine(unchecked((uint)(ulong)(1.2 * scale * scale + 1.5 * scale)));
Console.WriteLine(unchecked((uint)(ulong)(scale* scale + 7)));
}
}
Run Code Online (Sandbox Code Playgroud)
如果我用 .NET 4.7.2 编译我得到
859091763
7
但是如果我使用 Roslyn 或 .NET Core,我会得到
859091763
0
为什么会发生这种情况?
出于某种原因,当我在我的程序中将变量定义为"uint"而不是"unsigned int"时,它会出错.这看起来很奇怪,因为uint的typedef为:
typedef unsigned int uint;
Run Code Online (Sandbox Code Playgroud)
......所以我认为我可以互换地使用这两个.更确切地说,我正在分配一个函数的结果,该函数将"unsigned int"返回到uint变量中,然后在向量调整大小调用中使用该uint ...此时它出错.即,我的代码看起来像这样:
unsigned int getUInt()
{
return 3;
}
int main(void) {
vector<vector<float> > vectVect(100000);
for(uint i = 0; i < vectVect.size(); ++i)
{
vector<float>& myVect = vectVect[i];
uint myUnsignedInt = getUInt();
myVect.resize(myUnsignedInt);
}
cout << "finished" << endl;
}
Run Code Online (Sandbox Code Playgroud)
...它出错的行是myVect.resize行.
显然,我已经有了一个解决方案,但我想了解为什么会发生这种情况,因为我非常困惑.有人有主意吗?
PS - 如果有人认为它可能很重要,我在fedora 15上使用gcc v4.1.2 ...而定义uint的include文件是/usr/include/sys/types.h.
如何将Uint8ClampedArray(如用于存储HTML5画布图像数据的数据)转换为常规数组,其中值不会被约束到0- 255?