c#用整数转移任务

时间:2014-06-18 08:39:07

标签: c# int bit shift

这是一项考试任务,我想知道如何妥善解决这个问题。

任务:

我们必须将此代码的输出写为解决方案。

int iq = -99887766;
        string pout = "";
        int mask = 1 << 31;
        for (int n = 1; n <= 32; n++)
        {
            pout += (iq & mask) == 0 ? "0" : "1";
            iq <<= 1;
            if (n % 4 == 0)
            {pout += " ";}
        }
        Console.WriteLine(pout);

我的建议:

首先将-99887766转移到二进制文件:

  1. 9988776 in binary = 0000 0101 1111 0100 0010 1010 1001 0110

  2. 还原位并添加1 = 1111 1010 0000 1011 1101 0101 0110 1010

  3. 第二次将int掩码转移到二进制并将bitshift(left)转移到31

    1. mask = 0000 0000 0000 0000 0000 0000 0000 0001

    2. bitshift = 1000 0000 0000 0000 0000 0000 0000 0000后
    3. 第三 在for语句中,两个int都是按位&#34;&amp;&#34;计算的。这对我来说很清楚,例如:

      (1111 1010 0000 1011 1101 0101 0110 1010&amp; 1000 0000 0000 0000 0000 0000 0000 0000)!= 0所以字符串用1填充。

      然后我将iqhift iq减1:

      1111 1010 0000 1011 1101 0101 0110 1010 - &gt; 1111 0100 0001 0111 1010 1010 1101 0100

      并再次执行相同的操作,这会导致再次存储在字符串中的1,依此类推。

      最后的输出应该是字符串中的32个数字,0或1,每四个数字都有一个空白。

      这是解决此任务的正确方法吗?

      有没有任何技巧可以更快地完成它,因为这只能给出10分,这意味着我们应该解决这个问题 10分钟内!

1 个答案:

答案 0 :(得分:2)

这段代码有什么作用?怎么会命名这样的功能? 我会这么命名

/// <summary>
/// Convert an Int32 value into its binary string representation.
/// </summary>
/// <param name="value">The Int32 to convert.</param>
/// <returns>The binary string representation for an Int32 value.</returns>
public String ConvertInt32ToBinaryString(Int32 value)
{
        String pout = "";    
        int mask = 1 << 31;

        for (int n = 1; n <= 32; n++)
        {
            pout += (value & mask) == 0 ? "0" : "1";
            value <<= 1;
            if (n % 4 == 0)
            {pout += " ";}
        }

        return pout;
}

考试中的问题可以改为“在32位双补码中给我二进制表示-99887766”。

没有非常简单快速的二进制转换,但对于低于1000万的值,10分钟就足够了。几乎没有什么方法,但在纸面上我通常更喜欢“降低两个和减法的力量”而不是“用剩余的两个短划分”http://www.wikihow.com/Convert-from-Decimal-to-Binary

只是不(已经在第二步中使用二进制表示)将这些比特与位掩码进行比较。