【问题标题】:What is a equivalent of Delphi "shl" in C#?什么是 C# 中的 Delphi“shl”等价物?
【发布时间】:2011-03-18 05:46:03
【问题描述】:

我正在基于 Delphi(转换代码)在 C# 中制作应用程序,但我发现了一个我不认识的命令 (shl),我想知道是否有任何与 C# 等效的命令。

提前致谢。

【问题讨论】:

    标签: c# delphi command equivalent


    【解决方案1】:

    Shlleft shift。使用<< C# operator 达到同样的效果。

    示例:

    uint value = 15;              // 00001111
    uint doubled = value << 1;    // Result = 00011110 = 30
    uint shiftFour = value << 4;  // Result = 11110000 = 240
    

    【讨论】:

    • 有趣的事实:x &lt;&lt; y 也等同于x * 2 to the power of y。同样,x &gt;&gt; y 除以 2 y 次
    • 另一个有趣的事实,C/C# 的&gt;&gt; 运算符是算术移位,也就是说,它在无符号类型上从左移0,但在有符号类型上移1,因此它总是除以2、Delphi的shr函数是逻辑移位,总是移入0。 (顺便说一句,这是 C#4 和 Delphi 7 的比较 - 我找不到 Delphi 的shr 的正式定义)。
    【解决方案2】:

    Shl Keyword 开始,这是一个向左位移,从C# Bitwise Shift Operators 开始是&lt;&lt;

    【讨论】:

      【解决方案3】:

      Shl 是左移运算符,在 C# 中使用&lt;&lt;

      var
        a : Word;
      begin
        a := $2F;   // $2F = 47 decimal
        a := a Shl $24;
      end; 
      

      等同于:

      short a = 0x2F;
      a = a << 0x24;
      

      【讨论】:

      • 它们是相同的,但只是偶然。 Delphi 代码会将 $24 值截断为低 4 位,因为a 是 16 位类型。 C#代码会将a提升为32位类型int,然后将0x24截断为低5位。在这种情况下,它恰好等于低 4 位,但移动了一个使用第五位的量,您应该会看到差异。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-09
      • 2019-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-08
      相关资源
      最近更新 更多