【问题标题】:Hexa base digit and Decimal base digit at C#C#中的六进制基数和十进制基数
【发布时间】:2023-03-08 20:15:01
【问题描述】:

我下载的一些 c# 代码包括基于十六进制的计算。

eg. int length = ((((byte) hexstr[0x10]) & 0x80) > 0) ? 0x10 : 8;

当我将此代码更改为正常的基于十进制的代码时

int length = ((((byte) hexstr[16]) & 128) > 0) ? 16 : 8;

它给出了相同的解决方案而没有给出任何错误。
它仍然可以正常运行。
所以我想知道的是为什么大多数代码都使用十六进制基数,这比普通十进制数字更难理解。

如果有人知道,请告诉我。

【问题讨论】:

  • 只有代码的作者才能回答这个问题。似乎由于逻辑与十六进制相关,因此使用十六进制表示法是有意义的......

标签: c# hex


【解决方案1】:

它更清楚地显示了位模式。 0x80 显然是顶部 nybble 设置为 8 且底部 nybble 设置为 0 的值...从十进制值中根本看不清楚。

另一个例子,如果我想屏蔽一个整数的第二个和第三个字节,我可能会使用:

int masked = original & 0xffff00;

我在没有计算器或类似工具的情况下编写了该代码。我不可能对十进制等效项做同样的事情 - 我无法在脑海中将 65535 乘以 256 有任何成功的可能性,而且生成的代码也不会那么清晰。

【讨论】:

  • 啊……我又慢了+1
  • 由于我是 C# 领域的十六进制数字的初学者,我不明白您所说的“如果我想屏蔽整数的第二个和第三个字节”是什么意思。你能解释一下吗?
  • @MyatThu:这根本与 C# 无关——它只是整数的二进制表示。 “掩码”是指有效地删除一些位并保留其他位 - 所以我的掩码在这里保留了 32 位整数的中间 16 位,并清除其余部分。见en.wikipedia.org/wiki/Mask_(computing)
猜你喜欢
  • 1970-01-01
  • 2017-03-14
  • 2011-07-15
  • 2011-12-09
  • 1970-01-01
  • 1970-01-01
  • 2014-12-01
  • 2011-06-01
  • 2022-11-16
相关资源
最近更新 更多