大三下学期,尝试了下笔试,进去时感觉良好,出来就不行了,很多都考概念和基础,忘都忘完了。
题是这样的:
把两个32位的数合并成一个64位的数,把64位的数分解为两个32位的数
例如两个32位的数为01234567、89ABCDEF,64位的数为123456789ABCDEF(同时注意符号数和无符号数)
当时是要求用户JAVA,我想知道C#怎么解这种题虽然比较简单  但是我还是没怎么做出来,有点闷
对于这种位数的题一直有点头痛

解决方案 »

  1.   

    using System;class Program
    {
      static void Main()
      {
        uint  a = 0x01234567;
        uint  b = 0x89ABCDEF;
        ulong c = ((ulong)a << 32) + b;
        Console.WriteLine("a = 0x{0:X}, b = 0x{1:X}, c = 0x{2:X}", a, b, c);
      }
    }
      

  2.   

    using System;class Program
    {
      static void Main()
      {
        UInt32 a = 0x01234567;
        UInt32 b = 0x89ABCDEF;
        
        // 连在一起
        UInt64 c = ((UInt64)a << 32) + b;
        Console.WriteLine("a = 0x{0:X}, b = 0x{1:X}, c = 0x{2:X}", a, b, c);
        
        // 拆分
        UInt32 d = (UInt32)(c >> 32);
        UInt32 e = (UInt32)c;
        Console.WriteLine("c = 0x{0:X}, d = 0x{1:X}, e = 0x{2:X}", c, d, e);
      }
    }
      

  3.   


    ulong c = ((ulong)a << 32) + b;
    //换成下面这样行不
    //ulong c=((ulong)a*2^32)+b;
    //应该可以吧
      

  4.   

        // 非要相乘的话,这样可以:
        ulong c = ((ulong)a * ((ulong)uint.MaxValue + 1)) + b;
      

  5.   

        // 或者这样:
        ulong c = ((ulong)a * 0x100000000ul) + b;
      

  6.   

    C# 中的乘方是 System.Math.Pow(x, y) 方法
      

  7.   

    不知道合格不   uint _INT1 = 0x01234567;
                uint _INT2 = 0x89ABCDEF;            byte[] _Temp = new byte[8];
                BitConverter.GetBytes(_INT1).CopyTo(_Temp, 4);
                BitConverter.GetBytes(_INT2).CopyTo(_Temp, 0);
                ulong _Long = BitConverter.ToUInt64(_Temp,0);
                byte[] _LongTemp = BitConverter.GetBytes(_Long);            uint _X32_1 = BitConverter.ToUInt32(_LongTemp, 4);
                uint _X32_2 = BitConverter.ToUInt32(_LongTemp, 0);
      

  8.   

    LZ
    intel的CPU不能左移位和右移位32位,这个问题我和几个人商量过了的
    只能用别的办法
    我过去就是左移32位就得到了不正确的结果了···