精华内容
下载资源
问答
  • 本文收集整理关于负数二进制怎么转成十进制的相关议题,使用内容导航快速到达。内容导航:Q1:十进制负数转换成二进制数的方法?计算机中一般用补码来表示,若对于补码有不清楚之处请参考...

    本文收集整理关于负数二进制怎么转成十进制的相关议题,使用内容导航快速到达。

    内容导航:

    Q1:十进制负数转换成二进制数的方法?

    计算机中一般用补码来表示,若对于补码有不清楚之处请参考http://baike.baidu.com/view/377340.htm 负数转换为二进制,就是将其相反数(正数)的补码的每一位变反(1变0,0变1)最后将变完了的数值加1,就完成了负数的补码运算。这样就变成了二进制。 举个例子:将-1变成二进制。 ①首先确定二进制的位数,假定为16位,即可以表示-32768到32767的所有十进制整数。 ②将-1的相反数,也就是1表示为二进制0000 0000 0000 0001(十六进制表示为0x0001)(由于四位二进制可以表示为一位十六进制,故一般将二进制按四位进行分段表示) ③将这个二进制变反,可以得到1111 1111 1111 1110(十六进制HEX表示为0xFFFE) ④将变反后的数值加上1,得到-1的二进制表示1111 1111 1111 1111(十六进制表示0xFFFF) 其他在16位二进制可以表示范围内的负数均可如此进行计算。这里需要注意的是: ①二进制的位数及其可以表示的十进制数的范围。 ②二进制数码变反加一的过程。

    Q2:负数十进制转换成二进制

    方法如下: 1. 先把数转成正的。然后用除2的方法得到2进制。 2. 把最高位变成1代表负数 3. 按位取反,末尾的那一位加一得到补码 我举个例子来说吧如(-12)10=( )8=( )16 第一步:将-12看成12,转换成二进制  0000 0000 0000 1100 第二步:取反加一,为-12   1111 1111 1111 0100 第三步:转换成八进制是三位一结合:(177764)8   转换成十六进制是四位一结合:(fff4)16

    Q3:十进制负数怎么转化为二进制

    二进制负数有多种表示方法

    按照最常用的表示方法

    先将十进制负数取绝对值,变成正数,设该值为X

    对X进行降二取余法求二进制值

    对二进制进行按位求反,然后加一 ,即为该十进制负数的值

    例:

    -10

    X = |-10| = 10

    X(2) = 00001010 (假设是八位数二进制存储)

    X(2)反 = 11110101

    X(2)补 = 11110110

    Q4:二进制转十进制为何会自动变负数,怎么避免

    有符号的二进制(最高位为1)转十进制即是负数。怎么避免? 只要最高位为 0 就可避免。

    Q5:C语言中,负数的二进制码怎么转换为十进制?

    计算机中的整数是用补码存储的,最高位为符号位,C语言也遵从同样的规则。

    如果最高位为0则为正数,求值的时候,直接转为10进制即可。

    最高位如果为1代表为负数,求值的时候,需要先把二进制的值按位取反,然后加1得到负数绝对值(相反数)的二进制码,然后转为10进制,加上负号即可。

    以char型为例,char占一个字节,即8位。

    对于二进制值B10110011转换十进制过程为:

    先取反,即1变0,0变1,得到:

    B0100 1100

    再加1:

    B0100 1101

    转为十进制,即按照每位的权值乘上对应位的值,结果相加即可。

    十进制值=0*2^7 + 1*2^6 + 0*2^5 + 0*2^4 + 1*2^3 + 1*2^2 + 0*2^1 + 1*2^0

    =0+64+0+0+8+4+0+1

    =77

    加上符号,最终的十进制值就是-77。

    即B10110011 表示的十进制值为-77。

    Q6:十进制负数转化成二进制?

    负数的补码:符号位变为一,数值位取反加一,符号位是二进制数的第一位,其余为均为数值位具体实例分析:十进制负数转化成二进制:先把十进制负数取正,然后用二进制表示出来,因此-14先表示成01110,第一位是符号位0,变为1,数值位取反变为0001,再加1变为0010,因而-14补码就是10010,至于你题目中为什么-14补码为1111111111110010,其实不是什么大小的问题,你分析这个数,第一位还是符号位,为1,然后之后的也全是数值位,至于你说得为什么这么多1,在0010前面增加了27个1,是因为:机器中一般整型数是两个字节,也就是用32比特位来存储的,二进制表示14的话要在00010的数值位0010前面补27个0凑够31位,再加上一位符号位不就是32位了么,这种情况下补码不就是-14的数值位0010前面增加27个1么,因为这31个位全部要参与取反加1运算!说了这么多,够详细吧。你应该明白点了吧,别太着急,呵呵

    展开全文
  • c语言二进制数15.1.2 有符号整数有符号数的表示方法是由硬件决定,而不是由 C 决定的.或许表示有符号数最简单的方2018-8-21来自ip:13.186.169.154的网友咨询浏览量:200问题补充:c语言二进制数15.1.2 有符号整数...

    c语言里二进制数15.1.2 有符号整数有符号数的表示方法是由硬件决定,而不是由 C 决定的.或许表示有符号数最简单的方

    2018-8-21来自ip:13.186.169.154的网友咨询

    浏览量:200

    问题补充:

    c语言里二进制数

    15.1.2 有符号整数

    有符号数的表示方法是由硬件决定,而不是由 C 决定的.或许表示有符号数最简单的方法就是保留 1 位 (比如高位) 来表示数的符号.在一个 1 字节值中,该方法为数字本身留下 7 位.使用这样的符号量 (sign-magnitude) 表示法,10000001 表示 -1,00000001 表示 1.那么整个范围是 -127 到 +127

    二进制补码 (tow s-complement) 方法避免了这种问题,是当今使用最普遍的系统.我们将讨论这种方法于 1 字节值时的情况.在这种情形下,使用最后 7 位表示从 0 到 127 的值,同时高位设置为 0.这部分与符号量方法相同,同样地,如果高位是 1 ,那么该值为 负.两种方法的区别在于确定该负数值的方法.从一个 9 位组合 100000000 (256 的二进制形式) 中减去一个负数的位组合,结果是该负数值的数量.

    例如,假设一个负数的位组合为 10000000.作为一个无符号字节,该组合为 127.作为一个有符号的值,该组合为负 (位 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.其范围是 (对于 1 字节值) 是 -127 到 +127 .

    麻烦高手帮忙画个图他这里是如何算的?

    是这样么?

    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

    1 2 4 8 16 32 64 128 -1 -2 -4 -8 -16 -32 -64

    展开全文
  • C语言实现二进制文件读写

    千次阅读 2019-01-29 16:31:51
    C语言实现二进制文件读写
                    先介绍函数,我们一共要用到三个函数,fopen,fread,fwrite。二进制读写的顺序是用fopen以二进制方式打开读写文件,然后使用fread和fwrite两个函数将数据写入二进制文件中。下面我们看看一个拷贝程序的源码:

    Copy.c:

    #include <stdio.h>

    #include <stdlib.h>

    #define MAXLEN 1024

    int main(int argc, char *argv[])

    {

        if( argc < 3 )

        {

            printf("usage: %s %s\n", argv[0], "infile outfile");

            exit(1);

        }

       

        FILE * outfile, *infile;

        outfile = fopen(argv[2], "wb" );

        infile = fopen(argv[1], "rb");

        unsigned char buf[MAXLEN];

        if( outfile == NULL || infile == NULL )

        {

            printf("%s, %s",argv[1],"not exit\n");

            exit(1);

        }   

       

        int rc;

        while( (rc = fread(buf,sizeof(unsigned char), MAXLEN,infile)) != 0 )

        {

            fwrite( buf, sizeof( unsigned char ), rc, outfile );

    }

    fclose(infile);

    fclose(outfile);

    system("PAUSE");

    return 0;

    }

    现在来讲讲这个程序,这个程序的作用就是将文件1的内容直接拷贝到文件2中,注意fread的返回值,这个值需要在fwrite的时候将会用到。

    后面是关于fopen,fread,fwrite三个函数的详细说明。

    fopen(打开文件)

    相关函数 open,fclose 表头文件 #include<stdio.h> 定义函数 FILE * fopen(const char * path,const char * mode); 函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。
    mode有下列几种形态字符串:
    r 打开只读文件,该文件必须存在。
    r+ 打开可读写的文件,该文件必须存在。
    w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
    w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
    a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
    a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。
    上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。不过在POSIX系统,包含Linux都会忽略该字符。由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask值。 返回值 文件顺利打开后,指向该流的文件指针就会被返回。若果文件打开失败则返回NULL,并把错误代码存在errno 中。 附加说明 一般而言,开文件后会作一些文件读取或写入的动作,若开文件失败,接下来的读写动作也无法顺利进行,所以在fopen()后请作错误判断及处理。 范例 #include<stdio.h>
    main()
    {
    FILE * fp;
    fp=fopen("noexist","a+");
    if(fp= =NULL) return;
    fclose(fp);
    }

    fread(从文件流读取数据)

    相关函数 fopen,fwrite,fseek,fscanf 表头文件 #include<stdio.h> 定义函数 size_t fread(void * ptr,size_t size,size_t nmemb,FILE * stream); 函数说明 fread()用来从文件流中读取数据。参数stream为已打开的文件指针,参数ptr 指向欲存放读取进来的数据空间,读取的字符数以参数size*nmemb来决定。Fread()会返回实际读取到的nmemb数目,如果此值比参数nmemb 来得小,则代表可能读到了文件尾或有错误发生,这时必须用feof()或ferror()来决定发生什么情况。 返回值 返回实际读取到的nmemb数目。 附加说明

    范例 #include<stdio.h>
    #define nmemb 3
    struct test
    {
    char name[20];
    int size;
    }s[nmemb];
    main()
    {
    FILE * stream;
    int i;
    stream = fopen("/tmp/fwrite","r");
    fread(s,sizeof(struct test),nmemb,stream);
    fclose(stream);
    for(i=0;i<nmemb;i++)
    printf("name[%d]=%-20s:size[%d]=%d\n",i,s[i].name,i,s[i].size);
    } 执行 name[0]=Linux! size[0]=6
    name[1]=FreeBSD! size[1]=8
    name[2]=Windows2000 size[2]=11

    fwrite(将数据写至文件流)

    相关函数 fopen,fread,fseek,fscanf 表头文件 #include<stdio.h> 定义函数 size_t fwrite(const void * ptr,size_t size,size_t nmemb,FILE * stream); 函数说明 fwrite()用来将数据写入文件流中。参数stream为已打开的文件指针,参数ptr 指向欲写入的数据地址,总共写入的字符数以参数size*nmemb来决定。Fwrite()会返回实际写入的nmemb数目。 返回值 返回实际写入的nmemb数目。 范例 #include<stdio.h>
    #define set_s (x,y) {strcoy(s[x].name,y);s[x].size=strlen(y);}
    #define nmemb 3
    struct test
    {
    char name[20];
    int size;
    }s[nmemb];
    main()
    {
    FILE * stream;
    set_s(0,"Linux!");
    set_s(1,"FreeBSD!");
    set_s(2,"Windows2000.");
    stream=fopen("/tmp/fwrite","w");
    fwrite(s,sizeof(struct test),nmemb,stream);
    fclose(stream);
    } 执行

    参考fread()

    fseek()函数

    调用形式:


    #include"stdio.h"

    fseek(文件类型指针fp,位移量,起始点);

        函数功能:把与fp有关的文件位置指针放到一个指定位置。

        其中,“位移量”是long型数据,它表示位置指针相对于“起始点”移动的字节数。如果位移量是一个正数,表示从“起始点”开始往文件尾方向移动;如果位移量是一个负数,则表示从“起始点”开始往文件头方向移动。

        “起始点”不能任意设定,它只能是在stdio.h中定义的三个符号常量之一:

    起始点

    对应的数字

    代表的文件位置

    SEEK_SET

    0 文件开头

    SEEK_CUR

    1 文件当前位置

    SEEK_END

    2 文件末尾

        例如:

            fseek(fp,50L,0);或fseek(fp,50L,SEEK_SET);

        其作用是将位置指针移到离文件头50个字节处。

               

    再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

    展开全文
  • intmain(){char二进制数[D二进制位数]={0};int十进制数=0;char八进制数[D八进制位数]={0};char十六进制数[D十六进制位数]={0};//10转2进制F十转二进制(-1000,二进制数);printf("十转二进制:");for(intt=0;tif(t%4==0...

    int main() {

    char 二进制数[D二进制位数] = { 0 };

    int 十进制数 = 0;

    char 八进制数[D八进制位数] = { 0 };

    char 十六进制数[D十六进制位数] = { 0 };

    //10转2进制

    F十转二进制(-1000, 二进制数);

    printf("十转  二进制: ");

    for (int t = 0; t 

    if (t % 4 == 0 && t > 0) {

    printf(" ");

    }

    printf("%d", 二进制数[t]);

    }

    printf("\n");

    //2转10进制

    F二转十进制(二进制数, &十进制数);

    printf("二转  十进制: ");

    printf("%d\n\n", 十进制数);

    //2转8进制

    F二转八进制(二进制数, 八进制数);

    printf("二转  八进制: ");

    for (int t = 0; t 

    printf("%d", 八进制数[t]);

    }

    printf("\n");

    //8转2进制

    F八转二进制(八进制数, 二进制数);

    printf("八转  二进制: ");

    for (int t = 0; t 

    if (t % 4 == 0 && t > 0) {

    printf(" ");

    }

    printf("%d", 二进制数[t]);

    }

    printf("\n\n");

    //2转16进制

    F二转十六进制(二进制数, 十六进制数);

    printf("二转十六进制: ");

    for (int t = 0; t 

    F十六进制数字转字母输出(十六进制数[t]);

    }

    printf("\n");

    //16转2进制

    F十六转二进制(十六进制数, 二进制数);

    printf("十六转二进制: ");

    for (int t = 0; t 

    if (t % 4 == 0 && t > 0) {

    printf(" ");

    }

    printf("%d", 二进制数[t]);

    }

    printf("\n\n");

    printf("十转  八进制: ");

    F十转八进制(十进制数, 八进制数);

    for (int t = 0; t 

    printf("%d", 八进制数[t]);

    }

    printf("\n");

    printf("八转  十进制: ");

    F八转十进制(八进制数, &十进制数);

    printf("%d\n\n", 十进制数);

    printf("十转十六进制: ");

    F十转十六进制(十进制数, 十六进制数);

    for (int t = 0; t 

    F十六进制数字转字母输出(十六进制数[t]);

    }

    printf("\n");

    printf("十六转十进制: ");

    F十六转十进制(十六进制数, &十进制数);

    printf("%d\n\n", 十进制数);

    printf("八转十六进制: ");

    F八转十六进制(八进制数, 十六进制数);

    for (int t = 0; t 

    F十六进制数字转字母输出(十六进制数[t]);

    }

    printf("\n");

    printf("十六转八进制: ");

    F十六转八进制(十六进制数, 八进制数);

    for (int t = 0; t 

    printf("%d", 八进制数[t]);

    }

    printf("\n");

    return 0;

    }

    源文件会上传至附件中

    展开全文
  • 从一个9位组合100000000(256的二进制形式)减去一个负数的位组合,结果是该负值的量。例如,假设一个负值的位组合是10000000,作为一个无符号字节,该组合为表示128;作为一个有符号值,该组合表示负值(编码是7的位为...
  • C语言二进制求补码过程中取反后再加1,那个1是怎么加的?跪求!以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!C语言二进制求补码过程中取反后再...
  • C语言读写二进制文件

    万次阅读 2017-07-20 14:35:04
    可以这么说,除了文本文件以外的所有文件都是二进制文件。二进制文件相对于文本文件更容易修改。因为文本文件的修改,需要修改以后写入内存,然后再清空原文件,再从内存中读取出修改以后的内容到本文件中。二进制...
  • /**** Copyright(C) 2011, SKYCNC* All rights reserved** 程序名称:dec_to_bin_oct_hex* 功 能:输入一个十进制数,将其转化为二进制、八进制、十六进制** 作 者:zhanghbboy* 完成日期:11.07.27****/#include#...
  • 二进制运算(正码、反码、补码)机器数(机器存储的数)​ 一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1//比如byte类型是一个字节...
  • C语言二进制

    千次阅读 2017-07-10 23:41:38
    二进制
  • c语言读写二进制文件

    2020-04-01 21:39:11
    返回值: 成功:实际成功写入文件数据的块数目,此值和nmemb相等 失败:0 二进制拷贝例: int main(int argc,char* argv[]) { if (argc ) return -1; unsigned int start_time = time(NULL); FILE* f1=fopen...
  • C语言实现二进制文件读写(转载)

    千次阅读 2014-01-02 11:04:51
    C语言实现二进制文件读写(转载) 文件的读写是挺基础,为了备忘也为了之后查资料方便,从网上找了这个例子,觉得写的很好,就转载过来了。 先介绍函数,我们一共要用到三个函数,fopen,fread,fwrite。二进制读写...
  • 二进制文件二进制文件非常类似于结构体数组,只不过这些结构体被保存在一个磁盘文件而非内存数组中。因为是使用磁盘保存二进制文件中的结构体,所以您可以创建非常庞大数目的结构体(只受可用磁盘空间的限制)。它们...
  • 题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如:把9表示成二进制是1001,有2位是1。因此,如果输入是9,则函数输出是2。 核心思想:利用位运算,将原数字减去1再与原数字做与运算,等价于...
  • 十进制数-38的8位二进制补码是首先,写出原码 :? 1010 0110?? ,???? 最高位的1表示负号?负数的补码是其原码的各位取反,再加1 ,(最高位符号位除外),所以,?十进制数-38的8位二进制补码是?? 1101 1010关于二进制...
  • C语言栈的方式实现十进制数转换为二进制数,完整代码,DEVC中直接使用
  • C语言——十进制转为二进制、八进制、十六进制的函数转换 /*** * Copyright(C) 2011, SKYCNC * All rights reserved * * 程序名称:dec_to_bin_oct_hex * 功 能:输入一个十进制数,将其转化为二进制、...
  • 突然想做一个十进制输入,输出相应的二进制数算法。 算法简介: 1、十进制转二进制通过位运算实现; 2、二进制数通过链表保存; 3、因为低位最先得到,所以链表用头插法实现(也可以直接用栈)。 代码如下: ...
  • C语言二进制文件的读取

    千次阅读 2015-03-12 20:45:00
    例如,用fwrite向文件写入“65”时,文件的磁盘内容就是保存的65(磁盘上以二进制表示)。当用记事本打开文件时,记事本会读到65,并把65看作一个ASCII码,再把对应的字符“A”显示出来。因此屏幕上看到的文本内容...
  • 二进制 位运算符 & :按位与 相对应的二进制位:都为1才为1,否则为0 | :按位或 相对应的二进制位:有1为1,否则为0 ^ : 按位异或 相对应的二进制位:相同为0,不同为1 ~ :按位取反 相对应的二进制位:0变1,1...
  • 比如05,0237所以C语言没有二进制输入,最多可用函数去实现。八进制数的表达方法C/C++规定,一个数如果要指明它采用八进制,必须在它前面加上一个0(数字0),如:123是十进制,但0123则表示采用八进制。这就是八进制数...
  • c语言_各种进制转换

    2012-11-13 19:39:13
    利用C语言进行任意进制数据之间的转换。十进制转为二进制,八进制,16进制。相反的也可以。
  • 本文参考:https://blog.csdn.net/wn084/article/details/79963979原码:所谓原码就是机器数,是加了一位符号位的二进制数(因为数值有正负之分),正数符号位为0,负数符号位为1.计算机中存储、处理、运算的数据通常是...
  • 文章目录一、二进制、八进制、十六进制整数的书写1、二进制2、八进制3、十六进制4、需要注意的坑二、二进制、八进制、十六进制整数的输出三、获取视频教程四、版权声明整数是我们生活中常用的数据类型,也是编程中...
  • 十进制转二进制2.二进制转换成十进制数3.十进制数转换成十六进制数4.十六进制数转换成十进制数 说明 1.进制转换目前只限于非负数之间的转换(带负数的转换难度过大) 2.代码中变量命名可能不太规范,部分过程和注释...
  • ,-1全是1啊二进制如何表示负数最左一位表示正负----->1为负,0为正将-5用二进制表示:好的算法:(1)先加1,得-4(2)求绝对值,得4(3)二进制表示:00000100(4)求补: 11111011以前我都是这么算的:-5->10000101求补->...
  • C语言中的进制关系

    千次阅读 2017-06-30 19:36:47
    引言在做数据读写传输时最常用也最直观的莫过于十进制数,但是在不同应用场合、存储的方便在C语言开发时候也常采用二进制、八进制和十六进制存储数据。这边博文将对这3种进制转十进制及十进制转这3种进制做一解释并...
  • 然而却是delphi写的,特别想用C语言自己也实现一个,于是从google翻出了此代码。2、编译后的结果3、代码实现原理为了兼容Win32 + *nix,需要定义头文件,在读取时把【\r\n】和【\n】区分。// 201711...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,205
精华内容 9,682
关键字:

c语言负数二进制

c语言 订阅