我这个方法比较笨,希望有优化的一起讨论~
static void Main(string[] args){
char[] num="111111".Reverse().ToArray(); //测试数据,此数十进制为63,十六进制为3F
int i=0;
int result=0;
foreach(char ch in num){
//先把二进制数转换成十进制形式
result=(int)(result+Convert.ToInt32(ch.ToString())*Math.Pow(2.0,Convert.ToDouble(i)));
i++;
}
Console.Write("十进制形式:"+result);
//接下来将result转换成16进制
string end="";
int j=result;
int temp=0;
string m="";
while(j0){
temp=j%16;
switch(temp){
case 10:
m="A";
break;
case 11:
m="B";
break;
case 12:
m="C";
break;
case 13:
m="D";
break;
case 14:
m="E";
break;
case 15:
m="F";
break;
defalut:
m=temp.ToString();
break;
}
end+=m;
j=j/16;
}
Console.WriteLine(end.Reverse().ToArray());
Console.ReadLine();
}
1.负数的二进制使用补码
负数的二进制是采用补码计算 的,比如:
1的二进制为:0000 0001
它(正数)的反码和补码、原码都是一样的。
负数的反码要根据正数的二进制,符号位为1其它7位按位取反,-1的反码为1111 1110
负数的补码根据其反码+1,-1的补码为1111 1111
如果1+(-1)的话,则为0000 0000
2.二进制转八进制、十进制、十六进制
首先 二进制转十进制 :
若 0001 0010 转十进制则为:1*2^4+0*2^3+0*2^2+1*2^1+0*2^0=18
十进制转二进制可以除2取余,余数倒过来组合就是相应的二进制,或者差分成2的n次幂相加,有n的值为1,无n的为0,组合就为相应的二进制,比如:12=1*2^3+1*2^2+0*2^1+0*2^0=0000 1100
二进制转八进制 ,每二进制的3位可转换成八进制的一位
若00 010 010转八进制则为:22 【转换方式:((1*2^1+0*2^0)(1*2^1+0*2^0))】
二进制转16进制 ,每二进制4位转换成十六进制一位:
若0001 0010转十六进制则为:12
八进制转二进制,十六进制转二进制则倒过来 ,一个八进制位转成二进制3位,一个十六进制位转成二进制4位
3.位运算
左移
右移
2的二进制:0000 0010 左移后为 0000 1000(即右边补两个0)
左移规则,n左移x位后的值为 n*2^x
右移规则,n右移x位后的值为 n/2^x (右移取整数)
异或 ^
规则:相同为0,不同为1
比如:5: 0000 0101
6: 0000 0110
5^6= 0000 0011(二进制) =3(十进制)
按位与
比如:5: 0000 0101
6: 0000 0110
规则:同为1才为1,否则为0
56 = 0000 0100(二进制) = 4(十进制)
按位或|
比如:5: 0000 0101
6: 0000 0110
规则:有一个为1结果为1,其它为0
5|6 = 0000 0111(二进制) = 7(十进制)
按位取反~
比如:5: 0000 0101
规则:先取反,再取反码,再取补码
~5 取反:1111 1010
反码:1000 0101
补码: 1000 0110
结果为:-6
二进制转十进制
方法:“按权展开求和”
【例】:10001111 1*+1*+1*+1*+1*=143,所以10001111的十进制表示为143。
规律:个位上的数字的次数是0,十位上的数字的次数是1,......,依次递增,而十
分位的数字的次数是-1,百分位上数字的次数是-2,......,依次递减。
注意:不是任何一个十进制小数都能转换成有限位的二进制数。
二进制转八进制
二进制数转换成八进制数:从小数点开始,整数部分向左、小数部分向右,每3位为一组用一位八进制数的数字表示,不足3位的要用“0”补足3位,就得到一个八进制数。
【例】:10001111
010 001 111
2 1 7
所以10001111的八进制表示为(217)8.
二进制转十六进制
二进制数转换成十六进制数:二进制数转换成十六进制数时,只要从小数点位置开始,向左或向右每四位二进制划分一组(不足四位数可补0),然后写出每一组二进制数所对应的十六进制数码即可。
【例】:10001111
1000 1111
8 F
所以10001111的[2] 十六进制表示为(8F)。
八进制转二进制
八进制转换成二进制数:八进制数通过除2取余法,得到二进制数,每个八进制对应三个二进制,不足时在最左边补充零。
【例】:127
1 2 7
001 010 111
所以127的二进制就是001010111。
十六进制转二进制
十六进制转二进制:十六进制数通过除2取余法,得到二进制数,每个十六进制对应四个二进制,不足时在最左边补充零。
【例】:0x8F
8 F
1000 1111
所以0x8F的二进制是10001111。
1。
十进制
十进制使用十个数字(0、1、2、3、4、5、6、7、8、9)记数,基数为10,逢十
进一。历史上第一台电子数字计算机ENIAC是一台十进制机器,其数字以十进制表示,并以十进制形式运算。设计十进制机器比设计二进制机器复杂得多。而自然界具有两种稳定状态的组件普遍存在,如开关的开和关,电路的通和断,电压的高和低等,非常适合表示计算机中的数。设计过程简单,可靠性高。因此,现在改为二进制计算机。
2。
二进制
二进制以2为基数,只用0和1两个数字表示数,逢2进一。
二。进制转换
1。二进制与十进制数间的转换
(1)二进制转换为十进制
将每个二进制数按权展开后求和即可。请看例题:
把二进制数101转化为十进制数
1=1×2^0=1
1001=1×2^3+0×2^2+0×2^1+1×2^0=9
1011=1×2^3+0×2^2+1×2^1+1×2^0=11
或者,你用8421码就可以了,这样使用,
这是上下对应的,你看好了
8
4
2
1
1
1
1001=1×8+0×4+0×2+1×1=9
8
4
2
1
1
1
1
1011=1×8+0×4+1×2+1×1=11
(2)十进制转换为二进制
一般需要将十进制数的整数部分与小数部分分开处理。
整数部分计算方法:除2取倒取余法
(注意是倒着取余数)
请看例题:
十进制数(53)的二进制值为(110101)
53除以2得26,余1,取1
26除以2得13,余0,取0
13除以2得6,余1,取1
6除以2得3,余0,取0
3除以2得1,余1,取1
1除以2得0,余1,取1
再以12为例,转为二进制
12除以2得6,余0,取0
6除以2得3,余0,取0
3除以2得1,余1,取1
1除以2得0,余1,取1
由最后开始写起,就可得1100的二进制结果
小数部分计算方法:
就是把该小数不断乘2,再取所得的整数部份,直至没有小数为止,但请注意并
不是所有小数都能转到!
以0.875为例,
0.875乘以2得1.750,取整数1
0.750乘以2得1.500,取整数1
0.500乘以2得1,取整数1,就可得0.111的二进制结果
十进制数(0.875)的二进制值为(0.111)
PS:整数部分与小数部分算法的区别
有点长耐心看哦
stray二进制密码怎么解:
贫民窟的二进制密码宝箱想要破解首先需要拿着那个神秘密码的纸,找那个Elliot编程的人。
就是那个挠门会开的地方,上二楼然后他会告诉你破解的信息是Dufer Bar。
再去那个酒吧,吧台边上有一个灯牌,上面有一幅画,扒拉那个画就会露出密码。

其它密码:
公寓门禁密码:3748
PS:密码就在旁边的小屋里面,开手电筒就能看见。
Seamus房间密室密码:2511