关于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
是怎么算清楚,请指个比较简单的例子,可以的话在给我介绍一下其它数据类型转换的方法!

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.嘻嘻

恩 都回答的不错