• 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/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    如果文中有什么错误,欢迎指出。以免更多的人被误导。
  • 相关阅读:
    列表、元组、字典、集合类型及其内置方法
    Python数字类型及字符串类型的内置方法 ##
    Python之流程控制
    前端混合
    数据库
    oracle 11g 安装过程
    SQLAlchemy
    pipreqs快速生成python项目所需的依赖
    llinux基本操作
    linux简介
  • 原文地址:https://www.cnblogs.com/chenze-Index/p/14134808.html
Copyright © 2020-2023  润新知