这是一项考试任务,我想知道如何妥善解决这个问题。
任务:
我们必须将此代码的输出写为解决方案。
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转移到二进制文件:
9988776 in binary = 0000 0101 1111 0100 0010 1010 1001 0110
还原位并添加1 = 1111 1010 0000 1011 1101 0101 0110 1010
第二次将int掩码转移到二进制并将bitshift(left)转移到31
mask = 0000 0000 0000 0000 0000 0000 0000 0001
第三 在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分钟内!
答案 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。
只是不(已经在第二步中使用二进制表示)将这些比特与位掩码进行比较。