zoukankan      html  css  js  c++  java
  • C#中二进制、十进制和十六进制互相转换的方法

    一、

    简介:现实生活中,我们最常见的数为十进制数,比如交通信号灯上的数字,电子表上的时间等。

    相关换算

    2进制,用两个阿拉伯数字:0、1;
    8进制,用八个阿拉伯数字:0、1、2、3、4、5、6、7;
    10进制,用十个阿拉伯数字:0到9;
    16进制,用十六个阿拉伯数字……等等,阿拉伯人或说是印度人,只发明了10个数字啊?
    16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这六个字母来分别表示10,11,12,13,14,15。字母不区分大小写。
    十六进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方……
    所以,在第N(N从0开始)位上,如果是是数 X (X 大于等于0,并且X小于等于 15,即:F)表示的大小为 X * 16的N次方。
    假设有一个十六进数 2AF5, 那么如何换算成10进制呢?
    用竖式计算:
    2AF5换算成10进制:
    第0位: 5 * 16^0 = 5
    第1位: F * 16^1 = 240
    第2位: A * 16^2 = 2560
    第3位: 2 * 16^3 = 8192 +
    -------------------------------------
    10997
    直接计算就是:
    5 * 16^0 + F * 16^1 + A * 16^2+2 * 16^3 = 10997 [1] 
    (别忘了,在上面的计算中,A表示10,而F表示15)

     

    二进制数在C#中的写法:

    byte b=0b01111110

    二进制字符串的解释:

    string bstr="0111110";
    byte b=Convert.ToByte(bstr,2)
    //b=126

     

    16转10

    16进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方……
    所以,在第N(N从0开始)位上,如果是数 X (X 大于等于0,并且X小于等于 15,即:F)表示的大小为 X * 16的N次方。
    例:2AF5换算成10进制:
    第0位: 5 * 16^0 = 5
    第1位: F * 16^1 = 240
    第2位: A * 16^2= 2560
    第3位: 2 * 16^3 = 8192
    -------------------------------------
    10997
    直接计算就是:
    5 * 16^0 + F * 16^1 + A * 16^2 + 2 * 16^3 = 10997
    16进制到二进制
    由于在二进制的表示方法中,每四位所表示的数的最大值对应16进制的15,即16进制每一位上最大值,所以,我们可以得出简便的转换方法,将16进制上每一位分别对应二进制上四位进行转换,即得所求:
    例:2AF5换算成2进制:
    第0位: (5)16 = (0101) 2
    第1位: (F)16 = (1111) 2
    第2位: (A) 16 = (1010) 2
    第3位: (2) 16 = (0010) 2 -------------------------------------
    得:(2AF5)16=(0010.1010.1111.0101)2

    2转16

    16进制就有16个数,0~15,用二进制表示15的方法就是1111,从而可以推断出,16进制用2进制可以表现成0000~1111,顾名思义,也就是每四个为一位。举例:
    00111101可以这样分:
    0011|1101(最高位不够可用零代替),对照着二进制的表格,1024 512 256 128 64 32 16 8 4 2 1 (一般例举这么多就够了,如果有小数的话就继续往右边列举,如0.5 0.25 0.125 0.0625……)
    1024 512 256 128 64 32 16 8 4 2 1
    0 0 1 1| 1 1 0 1
    左半边=2+1=3 右半边=8+4+1=13=D
    结果,00111101就可以换算成16进制的3D。

     

    十进制转二进制

    1. 十进制整数转换为二进制整数十进制整数转换为二进制整数采用"除2取余,逆序排列"法。具体做法是:用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为小于1时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。
    十进制整数转二进制
    如:255=(11111111)B
     
    255/2=127=====余1
    127/2=63======余1
    63/2=31=======余1
    31/2=15=======余1
    15/2=7========余1
    7/2=3=========余1
    3/2=1=========余1
    1/2=0=========余1
     
    789=1100010101(B)
    789/2=394 余1 第10位
    394/2=197 余0 第9位
    197/2=98 余1 第8位
    98/2=49 余0 第7位
    49/2=24 余1 第6位
    24/2=12 余0 第5位
    12/2=6 余0 第4位
    6/2=3 余0 第3位
    3/2=1 余1 第2位
    1/2=0 余1 第1位

    2进制转10进制

    C# ToString("x2")的理解

    1).转化为16进制。

    2).大写X:ToString("X2")即转化为大写的16进制。

    3).小写x:ToString("x2")即转化为小写的16进制。

    4).2表示输出两位,不足的2位的前面补0,如 0x0A 如果没有2,就只会输出0xA

    二、使用C#语句转换

    二进制在C#中无法直接表示,我们一般用0和1的字符串来表示一个数的二进制形式。比如4的二进制为“100”。下面介绍C#里面用于进制转换的方法。

    十进制转换为二进制(int-->string)

    System.Convert.ToString(d, 2);// d为int类型 以4为例,输出为100

    十六进制转换为二进制(int-->string)

    System.Convert.ToString(d, 2);// d为int类型 以0X14为例,输出为10100

    上面ToString函数的第二个参数表示目标数字系统的基数。

    二进制转换为十进制(string-->int)

    System.Convert.ToInt32(s, 2);// d为string类型 以“1010”为例,输出为10

    十六进制转换为十进制(string-->int、int-->int)

    方法一:

    System.Convert.ToString(0xa,10);// 以0XA为例,输出为10

    或者

    System.Convert.ToInt32("0x41", 16);//以"0x41"为例,输出为65

    方法二:

    System.Int32.Parse(s, System.Globalization.NumberStyles.HexNumber);//s为string类型,以“41”为例,输出为65

    注意这里的s中不能带有“0X”或者“0x”,区别于上面的方法。

    二进制转换为十六进制(string-->int)

    先转换为十进制,在转换为十六进制

    string.Format("{0:X}",System.Convert.ToInt32(s, 2));// s为string类型 以“1010”为例,输出为A

    十进制转换为十六进制

    十进制转换为十六进制不需要特殊的方法,只要对输出格式进行控制一下就可以。

    或者使用string.Format("{0:x}", dec)方法进行控制,也可以用s.ToString("X")方式进行控制。

    除了数制转换之外,数据类型的转换也比较重要。对于基本数据类型,byte、char、int、string以及它们的数组形式的转换虽然简单,但是比较基础的知识。网上也有很多详解,用到的时候自行查阅即可。

     

    三、位运算符

    位运算符作用于位,并逐位执行操作。&、 | 和 ^ 的真值表如下所示:

     

    假设如果 A = 60,且 B = 13,现在以二进制格式表示,它们如下所示:

    A = 0011 1100

    B = 0000 1101

    -----------------

    A&B = 0000 1100

    A|B = 0011 1101

    A^B = 0011 0001

    ~A  = 1100 0011

    下表列出了 C# 支持的位运算符。假设变量 A 的值为 60,变量 B 的值为 13,则:

     

     代码:

    using System;
    namespace OperatorsAppl
    {
        class Program
        {
            static void Main(string[] args)
            {
                int a = 60;            /* 60 = 0011 1100 */  
                int b = 13;            /* 13 = 0000 1101 */
                int c = 0;          
    
                 c = a & b;           /* 12 = 0000 1100 */
                 Console.WriteLine("Line 1 - c 的值是 {0}", c );
    
                 c = a | b;           /* 61 = 0011 1101 */
                 Console.WriteLine("Line 2 - c 的值是 {0}", c);
    
                 c = a ^ b;           /* 49 = 0011 0001 */
                 Console.WriteLine("Line 3 - c 的值是 {0}", c);
    
                 c = ~a;               /*-61 = 1100 0011 */
                 Console.WriteLine("Line 4 - c 的值是 {0}", c);
    
                 c = a << 2;     /* 240 = 1111 0000 */
                 Console.WriteLine("Line 5 - c 的值是 {0}", c);
    
                 c = a >> 2;     /* 15 = 0000 1111 */
                 Console.WriteLine("Line 6 - c 的值是 {0}", c);
                Console.ReadLine();
            }
        }
    }
    View Code

    结果:

     左移右移

     

     

     

    转载:

    1、https://www.cnblogs.com/hitfredrick/p/6403003.html

    2、https://www.runoob.com/csharp/csharp-operators.html

    3、https://blog.csdn.net/qq_38158479/article/details/103151281

    作者:chenze
    出处:https://www.cnblogs.com/chenze-Index/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    如果文中有什么错误,欢迎指出。以免更多的人被误导。
  • 相关阅读:
    949. Largest Time for Given Digits
    450. Delete Node in a BST
    983. Minimum Cost For Tickets
    16. 3Sum Closest java solutions
    73. Set Matrix Zeroes java solutions
    347. Top K Frequent Elements java solutions
    215. Kth Largest Element in an Array java solutions
    75. Sort Colors java solutions
    38. Count and Say java solutions
    371. Sum of Two Integers java solutions
  • 原文地址:https://www.cnblogs.com/chenze-Index/p/14134808.html
Copyright © 2011-2022 走看看