gpt4 book ai didi

c# - 无符号整数 (c++) 与 uint (c#)

转载 作者:IT老高 更新时间:2023-10-28 12:30:50 24 4
gpt4 key购买 nike

以下是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");
}

这是 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;
}

两者都给出不同的结果。我错过了一些基本的东西吗?有什么想法吗?

最佳答案

C++ 和 C# 是不同的语言。在比较的情况下,它们有不同的处理类型提升的规则。

在 C++ 和 C 中,它们通常被比较为好像它们都是无符号的。这称为“无符号保留”。 C++ 和 C 编译器传统上使用“无符号保留”,并且在 C++ 标准和 K&R 中对此进行了指定。

在 C# 中,它们都被转换为有符号长整数,然后进行比较。这被称为“保值”。 C# 指定值保留。

ANSI C 还指定了值保留,但仅在处理 short 和 char 时。短裤和字符(有符号和无符号)以保留值的方式上转换为整数,然后进行比较。因此,如果将 unsigned short 与有符号 short 进行比较,结果会像 C# 示例一样。任何时候转换到更大的大小时,都会以保留值的方式完成,但如果两个变量的大小相同(而不是短裤或字符)并且其中一个是无符号的,那么它们将作为无符号量进行比较ANSI C。对两种方法的优缺点都有很好的讨论in the comp.lang.c FAQ .

关于c# - 无符号整数 (c++) 与 uint (c#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8266089/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com