为了看的清楚点我每四位用,号分开,实际程序里没这个,号。我定义了这么个变量
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#语言这个儿货怎么想的。
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#语言这个儿货怎么想的。
楼上两个大神,请不要云山雾罩的,能不能再讲详细点。
这个你说,0xFFFFFFFF 已经超出了 int 的表示范围?
怎么解释,他怎么算超 ,怎么算不超他的范围,
我明明 感觉 int是有符号数,
计算机里有符号数不就是用补码表示,范围是 -2的(n-1)次方 到 +2的(n-1)次方-1
那么0xffffffff不是-1吗,-1还超了int表示范围?
如果你说他是强类型,那他是具体怎么表示的。范围是多少?
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 . . .
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);
}
}
}
int y = (int)x;
2∧8*8 - 1