关于c#数据类型强制转换的算法问题
来源:百度知道 编辑:UC知道 时间:2024/05/14 02:44:00
刚接触c#,有一个问题,望高手指教
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
int a = 9999;
byte b;
b = (byte)a;
Console.WriteLine(b);
Console.Read();
}
}
}
把 int类型型变量a,强行转换成byte类型b后,
Console.WriteLine(b);显示的结果为15
是怎么算清楚,请指个比较简单的例子,可以的话在给我介绍一下其它数据类型转换的方法!
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
int a = 9999;
byte b;
b = (byte)a;
Console.WriteLine(b);
Console.Read();
}
}
}
把 int类型型变量a,强行转换成byte类型b后,
Console.WriteLine(b);显示的结果为15
是怎么算清楚,请指个比较简单的例子,可以的话在给我介绍一下其它数据类型转换的方法!
byte范围是0~255,所以9999直接赋值到b是肯定出错的,但是强制转换就会舍弃高位,这样:
9999的二进制:0010 0111 0000 1111
byte只有8位,所以,只赋值类后面的八位,而前面的八位就舍掉了。
所以 b 的二进制强制转换赋值后为:0000 1111
这样转换成10进制为15了。
byte 的范围是0 到 255的无符号 8 位整数
你的a=9999已经溢出了啊 这样转换是错误的
看一下异常信息就知道了啊
byte的范围是0~255的无符号8位整数,你直接赋值9999到b肯定会出错的啦,9999的二进制为:0010 0111 0000 1111
而byte的范围时8位无符号整数.所以b只能赋值后面的八位了
前面那八个就显示不出来了,强制转换后十进制赋值就变成了15啦
也就是后面八位二进制的数 0000 1111转换成十进制为15.嘻嘻
恩 都回答的不错