精华内容
下载资源
问答
  • C语言 进制转换

    2016-01-12 19:32:42
    3.进制数字进位方法进制 0、1、2、3、4、5、6、7、8、9 逢十进一 二进制 0、1 逢二进一 书写形式:需要以0b或者0B开头,比如0b101 八进制 0、1、2、3、4、5、6、7 逢八进一 书写形式:在前面加个0,比如045 十六进制 ...

    进制基本概念

    1.什么是进制?

    是一种计数的方式,数值的表示形式

    2.常见的进制

    十进制、二进制、八进制、十六进制

    3.进制数字进位方法

    十进制 0、1、2、3、4、5、6、7、8、9 逢十进一

    二进制 0、1 逢二进一

    书写形式:需要以0b或者0B开头,比如0b101

    八进制 0、1、2、3、4、5、6、7 逢八进一

    书写形式:在前面加个0,比如045

    十六进制 0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F 逢十六进一

    16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这五个字母来分别表示10,11,12,13,14,15。字母不区分大小写。

    书写形式:在前面加个0x或者0X,比如0x45

    数一下方块的个数, 并用十进制,二进制,八进制,十六进制表示

    练习

    1.判断下列数字是否合理

    00011 0x001  0x7h4  10.98 0986  .089-109

    +178 0b325  0b0010  0xffdc 96f 96.0f 96.oF  -.003

    4.编程输出各种进制

    假设有整型变量a,初始值为13,打印其8进制、16进制测试

    int a = 13;

    printf("10->8: %o\n", a);

    printf("10->16: %x\n", a);

    定义一个二进制数、八进制数、十六进制,打印其对应的10 进制

    int a = 0b00000000000000000000000000001101;

    printf("2->10: %d\n", a);

    a = 015;

    printf("8->10: %d\n", a);

    a = 0xd;

    printf("16->10: %d\n", a);

    输出结果:

    2->10: 13

    8->10: 13

    16->10: 13

    # 进制转换

    ##1.  10进制转 2 进制

    - 方法:

        +除2取余, 余数倒序得到的序列就是二进制表示形式

    ##2.  2进制转 10 进制

    - 方法:

        +每一位二进制进制位的值 * 2的(当前二进制进制位索引)

       >+ 索引从0开始, 从右至左

        +将所有位求出的值相加

    例如: 二进制11转换为10进制

    0b1011 = 1 * 2^0 + 1 * 2^1 + 0 * 2^2 + 1 *2^3

          = 1 * 1 + 1 * 2 + 0 * 4 + 1 * 8

          = 1 + 2 + 0 + 8

          = 11

    ##3.  2 进制转 8 进制

    - 三个二进制位代表一个八进制位, 因为3个二进制位的最大值是7,而八进制是逢八进一

    0b11110011 = 0b 011 110 011

              = 0363

    ##4.  8 进制转 2 进制

    - 方法:

        +每一位八进制位的值 * 8的(当前二进制进制位索引)

       >+ 索引从0开始, 从右至左

        +将所有位求出的值相加

    027 = 7 * 8^0 + 2 * 8^1

        =7 * 1 + 2 * 8

        =23

    ##3.   2 进制转 16 进制

    - 四个二进制位代表一个十六进制位,因为4个二进制位的最大值是15,而十六进制是逢十六进一

    例如: 二进制243转换为16进制

    0b11110011 = 0b 1111 0011

              = 0xF3

    ##4.  16 进制转 2 进制

    - 将16进制的每一位拆成4为二进制位

    例如:

    0x25 =0b 0010 0101

    =0b100101

    # 原码反码补码概念及转换

    ##1.原码反码补码基本概念

    - 数据在计算机内部是以补码的形式储存的

    - 数据分为有符号数和无符号数

        +无符号数都为正数,由十进制直接转换到二进制直接存储(其实也是该十进制的补码)即可。有符号数用在计算机内部是以补码的形式储存的。( 正数的最高位是符号位0,负数的最高位是符号位1。对于正数:反码==补码==原码。对于负数:反码==除符号位以外的各位取反。补码=反码+1)

        +正数的首位地址为0,其源码是由十进制数转换到的二进制数字

        +负数的首位地址为1,其源码后面的位也为10进制数转换过去的二进制数字,都是用补码方式表示有符号数的。

    - 在探求为何机器要使用补码之前, 让我们先了解原码, 反码和补码的概念.对于一个数, 计算机要使用一定的编码方式进行存储. 原码, 反码, 补码是机器存储一个具体数字的编码方式.

    原码, 反码, 补码是计算机原理的术语。说白了就是为了理解计算机2进制用的。对于C/C++来说,是和数据类型有关的。

    - 原码

        +原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值

    原码:[+1]0000 0001

    原码:[-1]1000 0001

    - 反码

        +正数的反码是其本身

        +负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.

    原码:[+1]0000 0001 反码:0000 0001

    原码:[-1]1000 0001 反码:1111 1110

       >+ 可见如果一个反码表示的是负数, 人脑无法直观的看出来它的数值. 通常要将其转换成原码再计算.

    - 补码

    - 正数的补码就是其本身

    - 负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)

    原码:[+1]0000 0001 反码:0000 0001 补码:0000 0001

    原码:[-1]1000 0001 反码:1111 1110 补码:1111 1111

       >+ 对于负数, 补码表示方式也是人脑无法直观看出其数值的. 通常也需要转换成原码在计算其数值.

    ##2.-1在内存中存储细节

    - 在64为计算机中,-1的原码、反码、补码如下

    -1原码 1000 0000 00000000 0000 0000 0000 0001

    -1反码 1111 1111 11111111 1111 1111 1111 1110

    -1补码 1111 1111 11111111 1111 1111 1111 1111

    >+ 正整数取反+1就是对应负数

    ##3.练习

    - 计算分别写出-13的原码、反码、补码

    -13原码:10000000 0000000000000000 00001101

    -13反码:11111111 1111111111111111 11110010

    -13补码:11111111 1111111111111111 11110011

    # 原码反码补码练习

    ##1.为什么要引入反码和补码?

    - 在开始深入学习前, 我的学习建议是先"死记硬背"上面的原码, 反码和补码的表示方式以及计算方法.

    - 现在我们知道了计算机可以有三种编码方式表示一个数. 对于正数因为三种编码方式的结果都相同, 所以不需要过多解释

    原码:[+1]0000 0001

    反码:[+1]0000 0001

    补码:[+1]0000 0001

    - 但是对于负数, 可见原码, 反码和补码是完全不同的. 既然原码才是被人脑直接识别并用于计算表示方式, 为何还会有反码和补码呢?

    原码:[-1]1000 0001

    反码:[-1]1111 1110

    补码:[-1]1111 1111

        +首先, 因为人脑可以知道第一位是符号位, 在计算的时候我们会根据符号位, 选择对真值区域的加减. (真值的概念在本文最开头). 但是对于计算机, 加减乘数已经是最基础的运算, 要设计的尽量简单. 计算机辨别"符号位"显然会让计算机的基础电路设计变得十分复杂! 于是人们想出了将符号位也参与运算的方法. 我们知道, 根据运算法则减去一个正数等于加上一个负数, 即: 1-1 = 1 + (-1) = 0 , 所以机器可以只有加法而没有减法, 这样计算机运算的设计就更简单了.

    ##2.补码的再深入

    - 计算十进制的表达式: 1-1=0

    1 - 1 = 1 + (-1) = [00000001]原 +[10000001]原 = [10000010]原 = -2

        +如果用原码表示, 让符号位也参与计算, 显然对于减法来说, 结果是不正确的.这也就是为何计算机内部不使用原码表示一个数.

    - 为了解决原码做减法的问题, 出现了反码:

    1 - 1 = 1 + (-1) = [0000 0001]原 + [10000001]原

                     = [0000 0001]反 + [11111110]反

                     = [1111 1111]反

                     = [1000 0000]原 (1111 1111,符号位不变,其他为逐位取反)

                     = -0

       +  发现用反码计算减法, 结果的真值部分是正确的. 而唯一的问题其实就出现在"0"这个特殊的数值 上. 虽然人们理解上+0和-0是一样的, 但是0带符号是没有任何意义的. 而且会有[00000000]原和 [1000 0000]原两个编码表示0.

    - 于是补码的出现, 解决了0的符号以及两个编码的问题:

    1-1 = 1 + (-1) = [0000 0001]原 + [10000001]原

                   = [0000 0001]补 + [11111111]补

                   = [0000 0000]补

                   = [0000 0000]原

        +这样0用[0000 0000]表示, 而以前出现问题的-0则不存在了.而且可以用[1000 0000]表示-128:

    (-1) + (-127) = [1000 0001]原 + [11111111]原 = [1111 1111]补 + [1000 0001]补 = [1000 0000]补

        +-1-127的结果应该是-128, 在用补码运算的结果中, [1000 0000]补就是-128. 但是注意因为实际上是使用以前的-0的补码来表示-128, 所以-128并没有原码和反码表示.(对-128的补码表示[1000 0000]补算出来的原码是[0000 0000]原, 这是不正确的)

    - 单字节的表示的最大的负数是多少?

     [10000000]补

    =[10000000]反+1

    =11111111+1

    =(1)00000000

    =00000000(最高位溢出了,符号位变成了0)

    有人会问 10000000这个补码表示的哪个数的补码呢? 其实这是一个规定,这个数表示的是-128 所以n位补码能表示的范围是 -2^(n-1)到2^(n-1)-1 比n位原码能表示的数多一个

    - 所以得出整型数的数值范围:

       int number1 = 0b10000000000000000000000000000000;

       int number2 = 0b01111111111111111111111111111111;

       int number3 = 0b11111111111111111111111111111111;

       printf("number1 = %d\n", number1);

       printf("number2 = %d\n", number2);

       printf("number3 = %d\n", number3);

    输出结果:

    number1 = -2147483648

    number2 = 2147483647

    number3 = -1

    # 位运算符介绍(一)

    ##1.什么是位运算符?

    - 位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。 C语言

    展开全文
  • C语言的进制的概念及进制转换、计算机中的原码、反码、补码的基本概念及转换方法

     1、计算机中的进制

     

        2进制:逢二进1      0  1

        8进制:逢八进1      0  1   2  3  4  5  6  7

        10进制:逢十进 默认的进制  0 - 9

        16进制:逢十六进1   0 - 9  A B C D E F      (内存的地址格式)

     

     

     2、进制的转换问题

     

        三个要素:

     

            数位(0-7)、

            基数(每一位能取值的个数)、

            位权(数码*基数^数位)、    101 = 1*2^0+0*2^1+1*2^2

            数码(每一位设置)

     

        转换:有得时候转换为人能识别的数制,要操作计算机写计算机能够识别的语言(二进制)

        10 -> 2  :  2取余法,把10进制数除以2,然后取得余数的序列,再倒序

        2  -> 10 :  所有位的位权相加 101 = 1*2^0+0*2^1+1*2^2

     

        2 --> 16 :  41法, 整数部分从右向左 4位结合成一位,小数部分从左向右4位结合1位,不足部分补0

        16 -->2  :  14法, 16进制的1位拆成二进制的4

     

        2 --> 8  : 31

        8 --> 2  : 13

     

      

        8 --> 10 : 8--> 2 --> 10

        16 --> 10: 16 -->2 -->10

     

     3、原码、反码和补码

     

        1)机器码、真值

          一个数的二进制的表示  机器码

          把一个数的二进制转换为10进值得值  真值

     

        2)计算数据的存储

       

          存储的时数的补码

          数是有正负性

          正数:最高位 0表示符号位 

          负数:最高位 1表示符号位

     

        3)原码、反码、补码:

       

           正数:就是其二进制表示         +1 00000001

           负数:二进制的最高位是1        -1 10000001

     

           反码:

     

           正数:就是其二进制表示         +1 00000001

           负数:符号位不变,其他位逐位取反 -1 11111110

     

           补码:

           正数:就是其二进制表示         +1 00000001

           负数:反码+1                 -1 11111111 

     

           注意:补码的真值不等于原码的真值的

     

     

     4、为什么要使用补码?

     

          主要是位了优化计算机中的减法

     

     5、补码的深入讲解

     

          1-1   =  1+(-1)

     

     6、位运算符

     

          二进制数码之间的运算

     

          6个符号

     

          & 按位与:逐位运算,有0则为0,同1则为1

          | 按位或:有11

          ^ 按位异或:相同为0,不同为1

          ~ 按位的取反:0110

          >> 按位右移:把一个数的所有的二进制位全部向右移动指定位数 10>>2;

                     注意:移出的位舍弃,高位补符号位,可能让一个数为0

          << 按位左移

     

                     把一个数的所有的二进制位全部向左移动指定位数

                     注意:移出的位舍弃,低位补0,可能会改变一个数的正负性

     

          11&2

     

          1011

       &  0010

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

          0010   

     

          技巧:

     

           任何数和1按位&操作,得到这个数的最低位

           偶数的最低位 0

           奇数的最低位 1

     

     

     7、变量在内存中存储的细节

     

           内存分配给变量的存储空间是从高到低

     

           一个变量低位低地址

           高位存放高地址

     

     8char类型

     

           char 

           char常量  'a','b',

               int型进行存储,占4个字节

           char变量

               以单个字节存储

               取出ascii  转换为2进制   放到一个字节

     

           %c 取出一个字符

           %d 取出整数值

     

    展开全文
  • c语言进制之间的转换

    2020-04-16 09:36:18
    c语言进制之间的转换一、二进制八进制十六进制转十进制二、十进制转换为二进制八进制十六进制1 整数部分2 小数部分三、 二进制、八进制和十六进制的转换1、二进制整数和八进制整数之间的转换2、二进制整数和十六进制...

    一、二进制八进制十六进制转十进制

    二进制、八进制和十六进制向十进制转换遵循“按权相加”的方法。所谓“权”,也即“位权”

    假设当前数字是 N 进制,那么: 
    对于整数部分,从右往左看,第 i 位的位权等Ni-1
     对于小数部分,恰好相反,要从左往右看,第 j 位的位权为N-j
    假设二进制数为100110,那么它转换为十进制的过程为:
    1×25+0×24+0×23+1×22+1×21+0×20=38
    八进制,十六进制的操作同样如此,只不过要把N的值改成8获16,然后再乘对应哪个位置上的数,求和即为要求的十进制数。

    二、十进制转换为二进制八进制十六进制

    1 整数部分

    十进制整数转换为 N 进制整数采用“除 N 取余,逆序排列”法:
    ① 将 N 作为除数,用十进制整数除以 N,可以得到一个商和余数; 
    ② 保留余数,用商继续除以 N,又得到一个新的商和余数; 
    ③ 仍然保留余数,用商继续除以 N,还会得到一个新的商和余数;
    ④ …… 
    ⑤ 如此反复进行,每次都保留余数,用商接着除以 N,直到商为 0 时为止。
    ⑥把先得到的余数作为 N 进制数的低位数字,后得到的余数作为 N 进制数的高位数字,依次排列起 来,就得到了 N 进制数字
    例如:
    234转换为二进制数的过程
    234/2=117……0
    117/2=58……1
    58/2=29……0
    29/2=14……1
    14/2=7……0
    7/2=3……1
    3/2=1……1
    1/2=0……1
    结果为11101010
    其他进制整数部分也是这样操作

    2 小数部分

    十进制小数转换成 N 进制小数采用“乘 N 取整,顺序排列”法。具体做法是
    ① 用 N 乘以十进制小数,可以得到一个积,这个积包含了整数部分和小数部分; 
    ② 将积的整数部分取出,再用 N 乘以余下的小数部分,又得到一个新的积; 
    ③再将积的整数部分取出,继续用 N 乘以余下的小数部分;
    ④ …… 
    ⑤ 如此反复进行,每次都取出整数部分,用 N 接着乘以小数部分,直到积中的小数部分为 0,或者达到所要求 的精度为止。

    ⑥把取出的整数部分按顺序排列起来,先取出的整数作为 N 进制小数的高位数字,后取出的整数作为低位数字,这 样就得到了 N 进制小数
    如把0.6875转换为二进制
    0.68752=1.3750 取1
    0.375
    2=0.750 取0
    0.752=1.50 取1
    0.5
    2=1.0 取1
    结果为0.1011
    如果一个数字既包含了整数部分又包含了小数部分,那么将整数部分和小数部分开,分别按照上面的方法完成转换, 然后再合并在一起即可。
    例如: 
    十进制数字 36926.930908203125 转换成八进制的结果为 110076.7345; 
    十进制数字 42.6875 转换成二进制的结果为 101010.1011

    三、 二进制、八进制和十六进制的转换

    1、二进制整数和八进制整数之间的转换

    二进制整数转换为八进制整数时,每三位二进制数字转换为一位八进制数字,运算的顺序是从低位向高位依次进行, 高位不足三位用零补齐

    2、二进制整数和十六进制整数之间的转换

    二进制整数转换为十六进制整数时,每四位二进制数字转换为一位十六进制数字,运算的顺序是从低位向高位依次 进行,高位不足四位用零补齐

    对应关系可参考在这里插入图片描述
    二进制、八进制和十六进制的整数转换一般够用,若有小数,也可先转换为十进制,再转换为对应进制

    若有不足,请多担待

    展开全文
  • //掩码,加上'0'的ASCII码编码可以完成该转换 } ps[size]='\0'; return ps; } void show_bstr(char * str){ int i=0; while(str[i]){ putchar(str[i]); if(++i%4==0&&str[i]) putchar(' '); } } //指...
    #include <stdio.h>
    char * itbs(int n,char * ps);
    void show_bstr(char * str);
    int inver_end(int number,int bits);
    void main(){
          char bin_str[8*sizeof(int)+1];
    	  int number;
    	  while((scanf("%d",&number))==1){
    			itbs(number,bin_str);
    			show_bstr(bin_str);
    			putchar('\n');
    			number=inver_end(number,4);
    			show_bstr(itbs(number,bin_str));
    	  }
    }
    
    char * itbs(int n,char * ps){
    	int i;
    	static int size=8*sizeof(int);
    	for(i=size-1;i>=0;i--,n>>=1){
    		ps[i]=(01&n)+'0';//掩码,加上'0'的ASCII码编码可以完成该转换
    	}
    	ps[size]='\0';
    	return ps;
    }
    
    void show_bstr(char * str){
    	int i=0;
    	while(str[i]){
    		putchar(str[i]);
    		if(++i%4==0&&str[i])
    			putchar(' ');
    	}
    }
    
    //指定位反转
    int inver_end(int number,int bits){ int mask=0; int bitval=1; while(bits-->0){ mask|=bitval; bitval<<=1; } return number^mask; }

     结果:

    转载于:https://www.cnblogs.com/yanggm/archive/2013/03/14/2958861.html

    展开全文
  • C语言进制及其转换

    2020-02-28 15:28:04
    一个十进制数例如123 ,怎么把它转化为二进制呢 ,方法如下: 123-128<0,所以128底下就是0,123-64=59>=0,所以64底下是1,59-32=27>=0,所以32底下是1,以此类推,可得 128 64 32 16 8 4 2 1 0 1 1 1 1 ...
  • 主要介绍了C语言用栈实现十进制转换为二进制的方法,结合实例形式分析了C语言栈的定义及进制转换使用技巧,需要的朋友可以参考下
  • C语言实现进制转换

    千次阅读 2020-10-28 14:06:22
    这里所使用的方法为数学方法,不使用计算机进制转换功能。 #include<stdio.h> //待更新,16转10的方法非算术方法,希望未来可以改进。 main() { //待更新,本程序代码使用算术方法,重在逻辑。 while(1)//...
  • c语言进制转换问题

    2018-09-04 17:13:08
    进制转换其实很简单,只要掌握一定的方法,可以让你轻松解决。
  • 进制转换二进制主要采用的是连除倒取余的方法 代码如下  int num = 8; int tempArr[32]={0}; int i = 0; while (num / 2 != 1 ) { tempArr[i] = num % 2; num /=2; i++; } ...
  • c语言进制

    2017-08-29 22:21:11
    1.负数二进制的表示方法 假设有一个 int 类型的数值为5,那么,我们知道它在计算机中表示为: 00000000 00000000 00000000 00000101 5转换成二制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0。...
  • 1.数据进制 指数据的进位计数规则,又称进位计数制,简称进制 2.常见的数制类型 名称 简写 ...如二进制整数中第0位(最低位)的权值是2 ^0,第一位的...3.1 二进制转换为非二进制 3.1.1 二进制 转 八进制 方法:3位二进
  • #include<stdio.h> #include<math.h> #include<string.h>...//其他任意进制转换为十进制 int main() { int trans(char a[],int ); char arr[100]; int t; printf("请...
  • C语言递归解决十进制转换二进制

    千次阅读 2020-02-09 12:48:54
    C语言利用十进制转换为二进制的方法
  • C语言算法之将十进制转换成二进制

    万次阅读 多人点赞 2018-06-20 14:35:29
    导语:在C语言中没有将其他进制的数直接输出为二进制数的工具或方法,输出为八进制数可以用%o,输出为十六进制可以用%x,输出为二进制就要我们自行解决了。... //进制转换函数的声明 int transfer(int x)...
  • C语言实现二进制转换十进制

    热门讨论 2010-10-26 17:15:43
    一个用C语言实现二进制转十进制方法,有详细代码说明与源代码,可以直接COPY运行。
  • 进制转换方法

    2019-01-23 16:28:43
    一、C语言进制的表示方法: %d、%o、%x分别对应表示十进制数、八进制数和十六进制数,在输出时使用格式化输出即可。 二、C++语言中进制的表示方法 dec -&gt; 十进制数 oct -&gt; 八进制数 hex -&...
  • C语言中,整数都是以二进制的形式存放在内存中,所谓的二进制、八进制、十进制和十六进制只是输出显示方式的不同。 下表是各种进制整数的输出格式。 细心的读者可能会发现,上表中没有二进制的输出格式,不能使用 ...
  • c语言中16进制转换为十进制

    万次阅读 多人点赞 2018-01-17 09:30:56
    方法1:使用进制转换转载:https://zhidao.baidu.com/question/51006929.html#include #include /* 十六进制数转换为十进制数 */ long hexToDec(char *source); /* 返回ch字符在sign数组中的序号 */ int ...
  • 在实际开发中,我们可能会用0和1的字符串来表达信息,例如某设备有八个传感器,每个传感器的状态用1表示正常,用0表示故障,用一个二进制的字符串表示它们如01111011,也可以用一个字符或整数表示它即123。...
  • 进制1,什么叫进制逢n进12,把r进制装换成十进制2进制,该数值从个位依次 * 2的0次方,*2的1次方,*2的2方,……其他进制也一样的方法3,十进制转换成r进制方法 : 除r取余,直至商为0,余数倒叙排列练习:十进制的...
  • 文章目录1、十进制转二进制字符串的思路2、二进制字符串转十进制的思路3、示例代码4、版权声明 在实际开发中,我们可以用0和1的字符串来表达信息,例如某设备有八个传感器,每个传感器的状态用1表示正常,用0表示...
  • 本次代码采用的方法是按权相加 例:十六进制 :96 对应十进制 : 9*16^1 + 6*16^0 = 150; /* 十六进制中有以下对应关系 A(a) = 10; B(b) = 11; C(c) = 12; D(d) = 13; E(e) = 14; F(f) = 15; */ # ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 504
精华内容 201
关键字:

c语言进制转换方法

c语言 订阅