bat365手机版app-bt365官网哪个真的-365官方平台

二进制、八进制、十进制、十六进制之间的转换(含小数的转换方法)

二进制、八进制、十进制、十六进制之间的转换(含小数的转换方法)

一、十进制与二进制互转

1. 二进制转十进制

1011010.100101(2)=90.578125(10)

方法一:“按权相加”法

2561286432168421.0.50.250.1250.06250.031250.0156250.00781250.00390625282726252423222120◇2-12-22-32-42-52-62-72-8//1011010.100101//64+0+16+8+0+2+0+0.5+0+0+0.0625+0.015625=90.578125(10)

方法二:

1011010.100101(2) =1×26 + 0×25 + 1×24 + 1×23 + 0×22 + 1×21 + 0×20 + 1×2-1 + 0×2-2 + 0×2-3 + 1×2-4 + 0×2-5 + 1×2-6 =64+0+16+8+0+2+0+0.5+0+0+0.0625+0+0.015625 =90.578125(10)

2. 十进制转二进制

方法一:整数部分“除2倒取余”,小数部分“乘2正取整”

90.578125(10)=90(10)+0.578125(10) 90÷2=45 • • • • • • 0 45÷2=22 • • • • • • 1 22÷2=11 • • • • • • 0 11÷2=5 • • • • • • 1 5÷2=2 • • • • • • 1 2÷2=1 • • • • • • 0 1÷2=0 • • • • • • 1 90(10)=1011010(2) 0.578125(10) 0.578125×2=0.15625• • • • • • 1 0.15625×2 =0.3125 • • • • • • 0 0.3125×2 =0.625 • • • • • • 0 0.625×2 =0.25 • • • • • • 1 0.25×2 =0.5 • • • • • • 0 0.5×2 =0 • • • • • • 1 0.578125(10)=0.100101(2) 90(10)+0.578125(10)=1011010(2)+0.100101(2)=1011010.100101(2)

方法二:整数使用“权位展开法”,小数部分“乘2正取整”

90.578125(10)=64+0+16+8+0+2+0+0.5+0+0+0.0625+0+0.015625

2561286432168421✔✔✔✔//10110100.578125(10)=同上90(10)+0.578125(10)=1011010(2)+0.100101(2)=1011010.100101(2)

二、十进制与八进制互转

十进制3278640965126481.0.1250.015625八进制858483828180◇8-18-2

1.十进制转八进制

十进制8162464128192512409632768十进制8181×281×38282×282×3838485八进制102030100200300100010000100000

方法一:整数部分“除8进位法(8(10)=10(8),8×8(10)=100(8),8×8×8(10)=1000(8))”,小数部分“乘8正取整”

90.578125(10)=90(10)+0.578125(10)=132(8)+0.45(8)=132.45(8) 90(10): 90÷8=11 • • • • • • 2 =11个八进制+2 =8个八进制+3个八进制+2 =100+30+2 =132(8) 0.578125(10) 0.578125×8=0.625 • • • • • • 4 0.625×8 =0 • • • • • • 5 0.578125(10)=0.45(8) 注意:如果小数部分乘8的结果永远带有小数部分,就需要根据实际情况“三舍四入”

方法二:整数部分“除8倒取余”,小数部分“乘8正取整”

90.578125(10)=90(10)+0.578125(10)=132(8)+0.45(8)=132.45(8) 90÷8 =11 • • • • • • 2 11÷8 = 1 • • • • • • 3 1÷8 = 0 • • • • • • 1 90(10)=132(8) 0.578125(10)=0.45(8)

2.八进制转十进制

方法一:按权相加法

132.45(8)=1×83-1+3×81+2×80+4×8-1+5*8-2=64+24+2+4×0.125+5×0.015625=90.578125(10)

方法二(转换较复杂):整数部分“拆分法(100(8)=8×8(8),1000(8)=8×8×8(8),以数量级进行拆分)”,小数部分“按权相加法”

132.45(8) =100(8)+30(8)+2(10)+(4×8-1)(10)+(5*8-2)(10) =8×8(8)+3×8(8)+2+4×0.125+5×0.015625 =64+24+2+0.578125 =90.578125(10)

三、十进制与十六进制互转

1.十进制转十六进制

十进制101112131415十六进制ABCDEF

十进制65536409625616.10.06250.00390625十六进制164163162161◇16016-116-2

整数部分除16“倒取余”,小数部分乘16“正取整” 90.578125(10)=90(10)+0.578125(10)=5A(16)+0.94(16)=5A.94(16) 90(10)=5A(16) 90÷16=5 • • • • • • 10=A 5÷16 =0 • • • • • • 5 0.578125(10)=0.94(16) 0.578125×16=0.25 • • • • • • 9 0.25×16 =0 • • • • • • 4

2.十六进制转十进制(“按权相加”法)

5A.94(16)=5×162-1+10×161+916-1+4×16-2=80+10+90.0625+4*0.00390625=90.578125

四、二进制与八进制互转

二进制八进制二进制十六进制000000000001100011010200102011300113100401004101501015110601106111701117001 0001010008001 0011110019001 010121010A001 011131011B001 100141100C001 101151101D001 110161110E001 111171111F

1. 二进制转八进制:从小数点位置起向左右两边划分,每三个为一组,不足三个的在最左边或最右边添0补齐,对照上边的表进行计算

1011010.100101=001 011 010.100 101=132.45(8) ←↑→

2. 八进制转二进制:与“二进制转八进制”转换方法相反

132.45(8)=001 011 010.100 101=1011010.100101(2)

3. 二进制转十六进制:从小数点位置起向左右两边划分,每四个为一组,不足四个的在最左或最右添0补齐,对照上边的表进行计算

1011010.100101=0101 1010.1001 0100=5A.94(16) ←↑→

4. 十六进制转二进制:与“二进制转十六进制”转换方法相反

5A.94(16)=0101 1010.1001 0100=1011010.100101(2)

五、八进制与十六进制互转

1. 八进制转十六进制:

八进制数→二进制数→十六进制数 八进制数→十进制数→十六进制数

2. 十六进制转八进制:

十六进制数→二进制数→八进制数 十六进制数→十进制数→八进制数

六、.NET Code

///

/// 二进制转十进制

///

public static decimal BinaryToDecimalism(decimal binary)

{

long integer = (long)binary;

decimal @decimal = binary - integer;

integer = Convert.ToInt64(integer.ToString(), 2);

//使用权位来计算

var temp = @decimal.ToString().Split('.');

if (temp.Length <= 1) return integer;

var decimals = temp[1].ToCharArray();

decimal tempSum = 0;

for (int i = 0; i < decimals.Length; i++)

{

int value = Convert.ToInt32(decimals[i].ToString());

tempSum += value * Pow(2, -(i + 1));

}

return integer + tempSum;

}

///

/// 十进制转二进制

///

/// 十进制数

/// 保留二进制小数位数

///

public static string DecimalismToBinary(decimal decimalism, int reservedDecimalNumber = 32)

{

int integerPart = (int)decimalism;

decimal fractionalPart = decimalism - integerPart;

string integerPartResult = Convert.ToString(integerPart, 2);//由于Convert.ToDecimal(str)只能保留小数点后18位,所以方法返回字符串

if (reservedDecimalNumber < 1 || fractionalPart == 0) return integerPartResult;

string[] results = new string[reservedDecimalNumber];

decimal loopIntegerPart = 0;

decimal loopFractionalPart = fractionalPart;

/*小数位乘2正取整*/

for (int i = 0; i < reservedDecimalNumber; i++)

{

loopFractionalPart = loopFractionalPart * 2;

loopIntegerPart = (int)loopFractionalPart;

loopFractionalPart = loopFractionalPart - loopIntegerPart;

if (loopFractionalPart > 0)

{

results[i] = loopIntegerPart.ToString();

}

else

{

results[i] = loopIntegerPart.ToString();

break;

}

}

return integerPartResult + "." + string.Join("", results);

}

private static decimal Pow(decimal x, int y)

{

decimal value = x;

if (y > 0)

{

for (int i = 1; i < y; i++)

{

value *= x;

}

}

else if(y < 0)

{

for (int i = 1; i < -y; i++)

{

value *= x;

}

value = 1 / value;

}

else

{

value=1;

}

return value;

}

相关推荐

招工启事怎么写简洁

招工启事怎么写简洁

📅 07-01 👁️ 493
考试报名申请

考试报名申请

📅 07-10 👁️ 3740