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

标签 c# c++ int unsigned 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");
    }

这是 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/

相关文章:

c# - EF 4 实体模型的 DTO 生成器

c# - 将 Parallel.ForEach 限制为仅 64 个操作

c++ - unsigned int有效位数

c++ - 在 macOS 中使用 RCPP 包 : Error in dyn. 加载创建 R 包时出错

由自定义缓冲区支持的 C++ 固定大小 vector

int - 将字母数字转换为数字并且应该是唯一数字

swift - 将分数上传到 GameCenter,无法添加两个二进制操作数

c# - 任务无法使用 SdkToolsPath 找到 "LC.exe"

c# - C# 自动关闭消息框

c++ - 从参数创建变量名