精华内容
下载资源
问答
  • 实际上,二进制表示法只能精确地表示多个1/2的幂的和。因此,3/4和7/8可以精确地表示为二进制小数,但是1/3和2/5却不能。 浮点数表示法 为了在计算机中表示一个浮点数,要留出若干位(因系统而异)存储二进制分数,...

    通常都是基于数字10来书写数字。例如2157的千位是2,百位是1,十位是5,个位是7,可以写成:

    2 x 1000 + 1 x 100 + 5 x 10 + 7 x 1

    注意,1000是10的立方(即3次幂),100是10的平方(即2次幂),10是10的1次幂,而且10(以及任意正数)的0次幂是1。因此,2157也可以写成:

    2 x 10^3 + 1 x 10^2 + 5 x 10^1 + 7 x 10^0

    因为这种书写数字的方法是基于10的幂,所以称以10为基底书写2157。姑且认为十进制系统得以发展是得益于我们都有10根手指。从某种意义上看,计算机的位只有2根手指,因为它只能被设置为0或1,关闭或打开。因此,计算机适用基底为2的数制系统。它用2的幂而不是10的幂。以2为基底表示的数字被称为二进制数(binarynumber)。二进制中的2和十进制中的10作用相同。例如,二进制数1101可表示为:

    1 x 2^3 + 1 x 2^2 + 0 x 2^1 + 1 x 2^0

    以十进制数表示为:

    1 x 8 + 1 x 4 + 0 x 2 + 1 x 1 = 13

    用二进制系统可以把任意整数(如果有足够的位)表示为0和1的组合。由于数字计算机通过关闭和打开状态的组合来表示信息,这两种状态分别用0和1来表示,所以使用这套数制系统非常方便。接下来,我们来学习二进制系统如何表示1字节的整数。

    1 二进制整数

    通常,1字节包含8位。C语言用字节(byte)表示存储系统字符集所需的大小,所以C字节可能是8位、9位、16位或其他值。不过,描述存储器芯片和数据传输率中所用的字节指的是8位字节。为了简化起见,本章假设1字节 是8位(计算机界通常用八位组(octet)这个术语特指8位字节)。可以从左往右给这8位分别编号为7~0。在1字节中,编号是7的位被称为高阶位(high-order-bit),编号是0的位被称为低阶位(low-orderbit)。每1位的编号对应2的相应指数。因此,可以根据图15.1所示的例子理解字节。

    a15cd188adf90bb60c41ac79024ddc48.png

    这里,128是2的7次幂,以此类推。该字节能表示的最大数字是把所有位都设置为1:11111111。这个二进制数的值是:

    128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255

    而该字节最小的二进制数是00000000,其值为0。因此,1字节可存储0~255范围内的数字,总共256个值。或者,通过不同的方式解释位组合(bit pattern),程序可以用1字节存储-128~+127范围内的整数,总共还是256个值。例如,通常unsigned char用1字节表示的范围是0~255,而signed char用1字节表示的范围是-128~+27。

    2 有符号整数

    如何表示有符号整数取决于硬件,而不是C语言。也许表示有符号数最简单的方式是用1位(如,高阶位)存储符号,只剩下7位表示数字本身(假设存储在1字节中)。用这种符号量(sign-magnitude)表示法,10000001表示−1,00000001表示1。因此,其表示范围是−127~+127。 这种方法的缺点是有两个0:+0和-0。这很容易混淆,而且用两个位组合来表示一个值也有些浪费。 二进制补码(two’s-complement)方法避免了这个问题,是当今最常用的系统。我们将以1字节为例,讨论这种方法。二进制补码用1字节中的后7位表示0~127,高阶位设置为0。目前,这种方法和符号量的方法相同。另外,如果高阶位是1,表示的值为负。这两种方法的区别在于如何确定负值。从一个9位组合100000000(256的二进制形式)减去一个负数的位组合,结果是该负值的量。例如,假设一个负值的位组合是10000000,作为一个无符号字节,该组合为表示128;作为一个有符号值,该组合表示负值(编码是7的位为1),而且值为100000000-10000000,即10000000(128)。因此,该数是-128(在符号量表示法中,该位组合表示−0)。类似地,10000001是−127,11111111是−1。该方法可以表示−128~+127范围内的数。 要得到一个二进制补码数的相反数,最简单的方法是反转每一位(即0变为1,1变为0),然后加1。因为1是00000001,那么−1则是11111110+1,或11111111。这与上面的介绍一致。 二进制反码(one’s-complement)方法通过反转位组合中的每一位形成一个负数。例如,00000001是1,那么11111110是−1。这种方法也有一个−0:11111111。该方法能表示-127~+127之间的数。

    3 二进制浮点数

    浮点数分两部分存储:二进制小数和二进制指数。下面我们将详细介绍。

    1.二进制小数

    一个普通的浮点数0.527,表示如下:

    5/10 + 2/100 + 7/1000

    从左往右,各分母都是10的递增次幂。在二进制小数中,使用2的幂作为分母,所以二进制小数.101表示为:

    1/2 + 0/4 + 1/8

    用十进制表示法为:

    0.50 + 0.00 + 0.125

    即是 0.625.

    许多分数(如,1/3)不能用十进制表示法精确地表示。与此类似,许多分数也不能用二进制表示法准确地表示。实际上,二进制表示法只能精确地表示多个1/2的幂的和。因此,3/4和7/8可以精确地表示为二进制小数,但是1/3和2/5却不能。

    浮点数表示法

    为了在计算机中表示一个浮点数,要留出若干位(因系统而异)存储二进制分数,其他位存储指数。一般而言,数字的实际值是由二进制小数乘以2的指定次幂组成。例如,一个浮点数乘以4,那么二进制小数不变,其指数乘以2,二进制分数不变。如果一份浮点数乘以一个不是2的幂的数,会改变二进制小数部分,如有必要,也会改变指数部分。

    展开全文
  • 我们平时使用的数字都是由 0~9 共十个数字组成的,例如 1、9、10、297、952 等,一个数字最多能表示九,如果要表示十、 十一、十九、一百等,就需要多个数字组合起来。 例如表示 5+8 的结果,一个数字不够,只能...
  • c语言二进制输出

    千次阅读 2020-03-01 20:33:38
    短除法,将十进制转换为二进制的笔算过程。 #include<stdio.h> int main() { int a,b,k,i; int remainder[30]; while(1) { //定义了一个remainder数组,用来收集短除法除得的余数,栈倒序输出。 ...
    方法一:短除法
    短除法,将十进制转换为二进制的笔算过程。
     
    #include<stdio.h>
    int main()
    {
        int a,b,k,i;
        int remainder[30];
        while(1)
        {
            //定义了一个remainder数组,用来收集短除法除得的余数,栈倒序输出。
            printf("请输入一个十进制数:  ");
            scanf("%d",&a);
            k=0;
            while(a!=0)
            {
                b=a/2;
                k++;
                remainder[k]=a-b*2;
                a=a/2;
            };
            printf("转换成二进制数是:  ");
            for (i=k; i>=1; i--)
            {
                printf("%d",remainder[i]);
            }
            printf("\n\n");
        }
        return 0;
    }
    
    方法二:itoa函数
    itoa函数将数值转换为字符串,通过规定转换进制实现。
     
    #include<stdio.h>
    #include<stdlib.h>
    //注意必须调用stdlib.h函数库
    int main(void)
    {
        while(1)
        {
            int a;
            printf("请输入一个十进制数:  ");
            scanf("%d",&a);
            char str[30];
            itoa(a,str,2);//2即是代表转换为2进制
            printf("转换成二进制数是: %s\n\n",str);
        }
        return 0;
    }
    

    函数:itoa(integer to array)
    功能:把一整数转换为字符串
    用法:char *itoa(int value, char *string, int radix); 将int整型数转化为一个字符串,并将值保存在数组string中。
    value: 待转化的整数。
    radix:是基数的意思,即先将value转化为radix进制的数,范围介于2-36,比如10表示10进制,16表示16进制。

    • string:保存转换后得到的字符串。
      返回值:
      char :指向生成的字符串, 同string。
      头文件:“stdlib.h”
    展开全文
  • 二进制换BCD码(内含完整C语言的代码)
  • C语言实现二进制逆序排列 代码实现 test.c #include <math.h> #include <stdio.h> ...//输入:i 要变序的 m... printf("i的二进制表示(注意:顺序是由低位到高位)\n"); for (j = 0; j < m; j++) {

    C语言实现二进制数逆序排列

    如输入3,二进制为011。通过算法,可逆序输出110,是011从低位到高位逆序排列的结果,转换成十进制为6。

    代码实现

    test.c

    
    #include <math.h>
    #include <stdio.h>
    
    //输入:i 要变序的数 m 二进制的位数
    //例:若输入为011(十进制数为3),则输出为110(十进制数为6)
    int AntiSequnce(int i, int m)
    {
    	int j, outcome = 0;
    	printf("i的二进制表示(注意:顺序是由低位到高位)\n");
    	for (j = 0; j < m; j++)
    	{
    		outcome = outcome + ((i>>j)&1)*pow(2,(m-1)-j);//以此由低位到高位取出输入的每位数,按十进制计算出结果
    		printf("%d \n", ((i >> j) & 1));
    	}
    	printf("逆序后的结果:%d \n", outcome);
    	return outcome;
    
    }
    

    test.h

    int AntiSequnce(int i, int m);
    

    main.c

    #include "test.h"
    
    
    int main(int argc, char *argv[]) 
    {
    	AntiSequnce(3, 3);
    }
    

    输出结果:在这里插入图片描述

    总结

    • 数制只是一种形式,如二进制和十进制,二进制的和十进制的运算可以混用。不同形式的数,其实质是一样的。
    		outcome = outcome + ((i>>j)&1)*pow(2,(m-1)-j);
    		//以此由低位到高位取出输入的每位数,按十进制计算出结果
    

    上述代码中,对输入的i先进行二进制操作,右移j位。再进行二进制操作,&1,取其最低位。根据十进制数与二进制数的转换公式,将其由最低位换算成最高位。经过累加,得到逆序排列的输出结果。

    展开全文
  • 在实际开发中,我们可以用0和1的字符串来表达信息,例如某设备有八个传感器,每个传感器的状态用1表示正常,用0表示故障,用一个二进制的字符串表示它们如01111011,用一个字符或整数表示它就是123。 1、十进制转...

    在实际开发中,我们可以用0和1的字符串来表达信息,例如某设备有八个传感器,每个传感器的状态用1表示正常,用0表示故障,用一个二进制的字符串表示它们如01111011,用一个字符或整数表示它就是123。

    1、十进制转二进制字符串的思路

    1)把十进数除以2,记下余数(余数保存在字符串中),现用商除以2,再记下余数,如此循环,直到商为0。

    2)把保存余数的字符串反过来,就是结果。

    例如123转化成二进制:

    123/2=61余1

    61/2=30余1

    30/2=15余0

    15/2=7余1

    7/2=3余1

    3/2=1余1

    1/1=0余1

    结果是1101111,反过来就是1111011。

    2、二进制字符串转十进制的思路

    把二进制字符串从最高位(左边第一位)开始用商乘以2再加余数(该位的数字),如此循环,左边第一位的商肯定是0。

    例如1111011转化成十进制:

    0*2+1=1

    1*2+1=3

    3*2+1=7

    7*2+1=15

    15*2+0=30

    30*2+1=61

    61*2+1=123

    结果是123。

    3、示例代码

    /*
     * 程序名:book.c,此程序演示十进制和二进制的互相转换。
     * 作者:C语言技术网(www.freecplus.net) 日期:20190525。
    */
    #include "stdio.h"
    #include <string.h>
    
    // 把十进制整数转换为二进制的字符串。
    // dec:待转换的十进制整数。
    // pbin:用于存放转换后的字符串的地址,注意,您必须保证pbin足以存放转换后的结果,否则可能会产生内存溢出。在64位操作系统中,long的最大取值为2的64次方,所以,pbin最大不必超过65。
    void dectobin(const long dec,char *pbin)
    {
      long ys=0;  // 余数。
      int s=dec;  // 商。
      int ii=0;   // 位数的计数器。
      char result[65];  // 十进制转换成二进制后,保存在result中,再反过来存放到pbin中。
    
      memset(result,0,sizeof(result));
    
      // 把十进制转换为二进制,存放在result中。
      while (s>0)
      {
        ys=s%2;
        s=s/2;
        result[ii]=ys+'0';
        ii++;
      }
      
      // 再把result字符串反过来,存放在pbin中。
      int jj=0;
      for (;ii>0;ii--)
      {
        pbin[jj]=result[ii-1];
        jj++;
      }
    
      pbin[jj]=0; // 出于安全的考虑,加上0表示字符串结束。
    }
    
    // 把二进制字符串转换为十进制。
    // pbin:待转换的二进制字符串。
    // 返回值:二进制字符串转换为十进制整数的结果。
    long bintodec(const char *pbin)
    {
      int ii=0;
      long result=0;
    
      while (pbin[ii]!=0)
      {
        result=result*2+(pbin[ii]-'0');
        ii++;
      }
    
      return result;
    }
    
    int main()
    {
      int ii=0;
      printf("请输入一个整数:");  
      scanf("%d",&ii);
    
      char str[65];
      dectobin(ii,str);  // 把十进制转换为二进制的字符串。
      printf("%d的二进制输出是:%s\n",ii,str);
    
      // 再把二进制字符串转换为十进制。
      printf("%s转换为十进制的结果是:%d\n",str,bintodec(str));
    }
    

    运行测试:
    在这里插入图片描述

    4、获取视频教程

    百万年薪程序员录制,《C/C++高性能服务开发基础》视频教程已在CSDN学院发布,优惠价12元,地址如下:
    https://edu.csdn.net/course/play/29402

    5、版权声明

    C语言技术网原创文章,转载请说明文章的来源、作者和原文的链接。

    来源:C语言技术网(www.freecplus.net

    作者:码农有道

    如果这篇文章对您有帮助,请点赞支持,或在您的博客中转发此文,让更多的人可以看到它,谢谢!!!

    展开全文
  • 十进制如何转二进制:将该数字不断除以2直到商为零,然后将余数由下至上依次写出,即可得到该数字的二进制表示。 以将数字10转化为二进制为例 当商为零时,将余数由下至上依次写出,即为10的二进制表示 #include &...
  • 对于刚开始学习C语言的来说,我们知道%d可以表示十进制的,%o可以表示八进制的,%x用来表示十六进制的,但却没有来表示二进制数的。 这就是相对应的八进制和十六进制#include &lt;stdio.h&gt; ...
  • 整数转化为二进制数输出整数转化为二进制数输出整数转化为二进制数输出整数转化为二进制数输出整数转化为二进制数输出整数转化为二进制数输出整数转化为二进制数输出整数转化为二进制数输出整数转化为二进制数输出...
  • c语言输出二进制表示

    2020-03-14 16:51:01
    //len:输出byte个 void printBinary(unsigned char * str, u8 *a,int len) { printf("%8s:\n", str); int i,j; u8 t; for (i = 0; i < len; i++) { t = a[i]; printf("0x%02x : ",t); for (j = 0; j &...
  • 二进制加减法,多种乘法方式实现二进制乘法。
  • 2.1 C语言中的进制数表示

    千次阅读 2020-12-21 18:24:00
    但是,表示一个二进制、八进制或者十六进制数字就不一样了,为了和十进制数字区分开来,必须采用某种特殊的写法,具体来说,就是在数字前面加上特定的字符,也就是加前缀。 1).二进制 二进制由 0 和 1 两个数字组成...
  • 一般用数字0到9和字母A到F(或a~f)表示,其中:A~F表示10~15。 十进制(Decimal System):每相邻的两个计数单位之间的进率都为十;十进制是中华民族的一项杰出创造,在世界数学史上有重要意义。著名的英国科学史学...
  • 突然想做一个十进制输入,输出相应的二进制数算法。 算法简介: 1、十进制转二进制通过位运算实现; 2、二进制数通过链表保存; 3、因为低位最先得到,所以链表用头插法实现(也可以直接用栈)。 代码如下: ...
  • 数字电子电路中,逻辑门的实现直接应用了二进制,因此现代的计算机和依赖计算机的设备里都用到二进制。每个数字称为一个比特(Bit,Binary digit的缩写)。 加法 二进制加法有四种情况: 0+0=0,0+1=1,1+0=1,1...
  • 1068: 二进制数 C语言

    2021-09-27 16:58:55
    1068: 二进制数 时间限制: 1 Sec 内存限制: 128 MB 提交: 18189 解决: 13878 [状态] [讨论版] [提交] [命题人:admin] 题目描述 将一个二进制数,转换为对应的十进制。 输入 输入一个二进制数,以回车结束。该...
  • C语言中的二进制、八进制和十六进制的表示

    千次阅读 多人点赞 2020-02-18 17:21:04
    二进制数、八进制和十六进制表示 一个数字默认就是十进制的,表示一个十进制数字不需要任何特殊的格式。但是,表示一个二进制、八进制或者十六进制数字就不一样了,为了和十进制数字区分开来,必须采用某种...
  • 在实际开发中,我们可能会用0和1的字符串来表达信息,例如某设备有八个传感器,每个传感器的状态用1表示正常,用0表示故障,用一个二进制的字符串表示它们如01111011,也可以用一个字符或整数表示它即123。...
  • C语言中 八进制、二进制表示方法

    千次阅读 2020-08-06 15:48:51
    注意:其输入不能超过最大值 8和2
  • 二进制的英文是Binary,简写为B或BIN,所以163 = 0b10100011(前面加上“0b”或“0B”) 八进制的英文是Octal,简写为O或OCT,所以163 = 0243(前面加上数字0,以示与十进制的区别) 十进制的英文为Decimal,简写为D...
  • C语言 二进制转任意进制

    千次阅读 2017-06-28 13:38:53
    将输入的0和1数字序列表示二进制数转换为八进制、十六进制。 (2)功能要求 ①将输入的0和1数字序列存放到数组中。 ②从终端输入要转换的进制。 ③将转换后的结果保存到数组中,并以适当的形式输出。 ④若...
  • C语言二进制换十进制(简单)

    千次阅读 2021-11-16 19:06:27
    第一行一个正整数n( 1 ≤n ≤30 ),表示二进制数的长度。 第二行一个二进制数。 输出格式: 输出一个整数,表示对应的十进制。 输入样例: 5 10101 输出样例: 21 做题思路:先确定二进制数长度,注意...
  • C语言-十进制/二进制数的互相转化

    千次阅读 2020-02-16 14:58:57
    编写一个程序,将输入的十进制转化为二进制表示。例如:输入十进制64,输出二进制表示1000000 void deTobi(int a) { int i = 0, stack[10], r, s; do { r = a / 2; s = a % 2; stack[i] = s; ...
  • C语言中常用的二进制与ASCII码互相转换指南,这是自己整理的。还请大家批评指正!
  • C语言浮点数的二进制表示
  • C语言把十进制转换为二进制数的方法和示例

    万次阅读 多人点赞 2020-04-18 22:46:34
    C语言中,整数都是以二进制的形式存放在内存中,所谓的二进制、八进制、十进制和十六进制只是输出显示方式的不同。 下表是各种进制整数的输出格式。 细心的读者可能会发现,上表中没有二进制的输出格式,不能使用 ...
  • 函数有两个参数,参数(1)是要转换为十进制的进制,参数(2)是标示参数(1)是什么进制(2,8,16标示二进制,八进制,十六进制)。 要有报错信息,比如参数是1012,但参数(2)是2,显然是进制数表示有错误。 系统表 pg_...
  • C语言中将二进制转换成十进制

    千次阅读 2021-01-04 16:22:34
    C语言中将二进制转换成十进制 介绍:项目开发中需要用到将二进制转换成十进制之后进行运算,所以自己写了一个转换函数。 代码:`/*//////////////////////////////// *function:将二进制数据转换为十进制 * *value:...
  • 文章目录一、二进制、八进制、十六进制整数的书写1、二进制2、八进制3、十六进制4、需要注意的坑二、二进制、八进制、十六进制整数的输出四、版权声明 整数是我们生活中常用的数据类型,也是编程中常用的一种数据,...
  • c语言进制表示

    2019-12-30 21:47:55
    c语言中各种进制表示方法: 二进制 据我所知,c/c++中没有二进制字面常量的表示方法(大概因为所有的数据本来就是以二进制存放的) 八进制 04567 注意是前面的是数字0 十进制 没啥说的。。。。。。什么?你不会写,你...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 116,176
精华内容 46,470
关键字:

c语言二进制数表示

c语言 订阅