为了看的清楚点我每四位用,号分开,实际程序里没这个,号。我定义了这么个变量 
int x=0xfff,ffff;  //OK 没问题然后我又这么定义
int y=0xffff,ffff;
// 错: Cannot implicitly convert type 'uint' to 'int'. An explicit 
//     conversion  exists   (are you missing cast)
这我就非常的不理解。 0xffff,ffff 不是-1吗,-1不就是有符号数,怎么还不能隐式的从 无符号 uint 
转换为 int;
高手给点明解释下。 另外我想:我定义这个int y变量装个 16进制的负1,应该是轻松小菜一碟,没想到就这也能遇到坑爹的错误。真不知道设计C#语言这个儿货怎么想的。

解决方案 »

  1.   

    C#是强类型语言,0xFFFFFFFF 已经超出了 int 的表示范围,编译器会把它当做一个 uint 类型,uint 不能隐式的转换为 int。对于强类型的语言,0xFFFFFFFF 和 -1 并不是一回事。
      

  2.   


    楼上两个大神,请不要云山雾罩的,能不能再讲详细点。
    这个你说,0xFFFFFFFF 已经超出了 int 的表示范围?
    怎么解释,他怎么算超 ,怎么算不超他的范围, 
    我明明 感觉 int是有符号数,
    计算机里有符号数不就是用补码表示,范围是 -2的(n-1)次方 到 +2的(n-1)次方-1
    那么0xffffffff不是-1吗,-1还超了int表示范围?
    如果你说他是强类型,那他是具体怎么表示的。范围是多少?
      

  3.   

    如果你非要这么表示,可以用BitConverterusing System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                int i = BitConverter.ToInt32(new byte[] { 0xff, 0xff, 0xff, 0xff }, 0);
                Console.WriteLine(i);
            }
        }
    }-1
    Press any key to continue . . .
      

  4.   

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                byte[] b = BitConverter.GetBytes((uint)0xffffffff);
                int i = BitConverter.ToInt32(b, 0);
                Console.WriteLine(i);
            }
        }
    }
      

  5.   

    int y = (int)0xffffffffU;强制类型转换就可以了,类型检测是为了减少低级错误。
      

  6.   

    汗,这样写却可以,这样的编译器确实有问题            uint x = 0xffffffffU;
                int y = (int)x;
      

  7.   

    0xffffffff 在程序中是原码
    2∧8*8  - 1