计算机中数据实体和数据表示形式(以C#为例)
摘自网络的一段话:
“在程序代码中,可以用多种方式表示数据,十进制、十六进制、八进制都是常用的表示方式,但计算机内部永远就只使用二进制,与你写程序时用什么无关。你说要定义数组int a[10],其中涉及具体数据表示的就只有十进制数10,但这个数值你完全可以用十六进制表示,写int a[0x0A],最终结果都是一样的,数组a都是(十进制)10个元素。至于如果你说数组a中要储存十六进制数据,那也是跟这个完全一样,计算机内部就只认识那些二进制数,呈现出来人眼要观察那些数据,是你希望它以什么进制显示出来给你看而已,你希望看十进制,就命令它用十进制显示,希望看十六进制,就命令它用十六进制显示,无论显示的是什么进制,数值本身永远是一样的,输入时,也不管你用什么进制输入,都以该进制的实际数值储存。”
实践:
1 ////16进制(2进制,8进制)数转换为10进制 2 //方法一 3 //得到一个16进制数,存入字符串变量中, 4 string s16a = (0x120).ToString();//s16a为"288",期望为"0x120"。 5 string s16b = "0x120"; 6 //使用Convert方法转换,把16进制的s转换为10进制数放入变量中 7 int num11 = Convert.ToInt32(s16a, 16);//num11值为648,不是期望的结果 8 int num12 = Convert.ToInt32(s16b, 16);//num12值为288 9 Console.WriteLine("num11为{0},num12为{1},转换前s16a为{2},s16b为{3}", num11, num12, s16a, s16b); 10 //方法二 11 //如果存入int变量中,会自动转换为10进制 12 int num2 = 0x120; //num值为288 13 14 ////10进制数转换为16进制(2进制,8进制) 15 int i10 = 138; 16 string s16 = Convert.ToString(i10, 16); 17 string s8 = Convert.ToString(i10, 8); 18 string s2 = Convert.ToString(i10, 2); 19 Console.WriteLine("s16为{0},s8为{1},s2为{2},转换前i10为{3}", s16, s8, s2, i10); 20 21 Console.ReadKey();