C# 乘法给出了错误的答案

C# multiplying gives wrong answer

当我尝试像这样乘以十六进制值时

int i = 0x4;
int z = i * 3;

它说 z = 12 c# 只是把它当作一个普通数字 (答案应该是 C)

一个 int 只包含一个没有任何基数的整数值。

默认情况下 int 被初始化为小数:

int x = 27;

默认情况下 int 显示为小数:

Console.Write (x); // Shows 27

一个int也可以初始化为二进制或十六进制:

int y = 0xAA;
int z = 0b0101;

并显示为十六进制:

Console.Write(y.ToString("X")); // Shows AA

但是它的初始化方式和显示方式是完全独立的。

你在这里有一个根本性的误解,重要的是你马上把它弄清楚。否则错误的认识会一直困扰着你

数字本身没有固有的表示。 int 类型的变量不包含十进制或十六进制值。也不是二进制的。这只是一个数字。它是计算机中的数字、纸上的数字还是自然界中的数字都没有关系。一个数字就是一个数字。

您的计算机需要以某种方式存储数字,为此我们使用电路以我们喜欢的二进制方式存储数字 - 或者我们有时说的零和一。那些一和零实际上是电压、电流、晶体管。但是,存储的数字本身只是一个数字,没有固有的表示形式。存储格式本质上是二进制的,而不是数字本身。

当你想看到数字时,大多数人习惯于以十进制表示法看到它。或文本,如 "one billion"。但是您也可以在十六进制表示中看到它。或二进制表示。无论您决定使用哪种表示,值都是相同的。如果你有十个苹果,那就是 10 个苹果,或者 $A 个苹果,或者 0x1010 个苹果。这是表示完全相同值的四种方式。

当您在源代码中使用不同的符号表示文字值时,当您的数字成为可执行代码时,符号本身就会被丢弃。无论您选择以十六进制、十进制还是二进制表示数字,这都与您的程序的执行完全无关。当您将 3 乘以 4 时,您将得到 12,无论您的源代码中的表示形式如何,也无论您决定程序应使用何种表示形式来输出数字。您可以自由选择任何输出表示形式,无论是十进制、十六进制、二进制、文本、罗马字面量还是口语克林贡语。

如果您在任何时候遇到需要将数字从十进制转换为十六进制的任务,那么让我们弄清楚实际情况是什么。它只能意味着您的程序正在处理一个字符串,其中数字以十进制表示法表示,然后必须将该数字解析为一个值。它可以是一个临时保存值的 int 变量。之后,该值将在新字符串中以其十六进制表示形式表示。很明显,保存在字符串中的数字确实具有固有的表示形式,否则我们将不知道它们的含义。如果您不知道字符串“01”是十进制、十六进制还是二进制或其他任何形式,您怎么知道它的含义?