进制之间的相互转化

由一个问题想到的!

这个问题是 在Windows计算器里,用programmer方式,

选择Dword即32位编码,然后切换到16进制,输入80800006,

再转化成十进制,会得到一个负数-2139095034

在C#里面80800006是一个uint变量,如何把它变成一个Int的负数?

答案:

uint aa = 0x80800006;
int bb=unchecked((int)aa);

unchecked操作符用于整型算术运算时控制当前环境中的溢出检查 

意思就是无论运算是否是常量表达式,都没有编译错误或是运行时异常发生,只是返回值被截掉不符合目标类型的高位。


如果是Qword怎么办?会显示2155872262

用Int64 就可以了。 

uint aa = 0x80800006;
Int64 cc = (Int64)aa;
题外说一下,其实int Int16 Int32 Int64的关系就是

int   表示整型, 
后面的   数据表示这个整型的长度, 
比如   int32   表示   32位整型,   4字节,   是目前使用最多的 

说的更简单一点就是

int16=short;
int32=int;
int64=long;
比如写

uint aa = 0x80800006;
int bb = unchecked((int)aa);
Int64 cc = (Int64)aa;
Int32 dd=(Int32)aa;
Int16 ee=(Int16)aa;
bb = cc;
bb是int,cc是Int64 这样写就有编译错误:Error1Cannot implicitly convert type'long' to 'int'. An explicit conversion exists (are you missing a cast?)

扩展(其他写法):

string hexstring = "80800006";
int result = Convert.ToInt32(hexstring, 16);
long result1 = Convert.ToUInt32(hexstring, 16);
int test = -2139095034;
string tesString = Convert.ToString(test, 16);


//十进制转二进制
Console.WriteLine(Convert.ToString(69, 2));
//十进制转八进制
Console.WriteLine(Convert.ToString(69, 8));
//十进制转十六进制
Console.WriteLine(Convert.ToString(69, 16));

//二进制转十进制
Console.WriteLine(Convert.ToInt32(“100111101″, 2));
//八进制转十进制
Console.WriteLine(Convert.ToInt32(“76″, 8));
//十六进制转十进制
Console.WriteLine(Convert.ToInt32(“FF”, 16));

即十进制的数用Int32表示,而二进制,八进制,十六进制的数都用string表示






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值