精华内容
下载资源
问答
  • 十进制数-38的8位二进制补码是首先,写出原码 :? 1010 0110?? ,???? 最高位的1表示负号?负数的补码是其原码的各位取反,再加1 ,(最高位符号位除外),所以,?十进制数-38的8位二进制补码是?? 1101 1010关于二进制...

    十进制数-38的8位二进制补码是

    首先,写出原码 :? 1010 0110?? ,???? 最高位的1表示负号?负数的补码是其原码的各位取反,再加1 ,(最高位符号位除外),所以,?十进制数-38的8位二进制补码是?? 1101 1010

    关于二进制补码,它可以用来表示小数吗二进制补码可以用来表示小数吗?还有给我一段二...

    【二进制补码可以用来表示小数吗?】

    可以,不过需要你自己来处理.方法是,按照所需要的精度,将该小数放大若干倍,当整数处理.

    为方便通常放大2的若干次方倍.

    这样,你就可以把这个整数看成“定点小数”,即保留了若干位二进制小数的定点数.

    有些资料上,将这种格式称作Q格式.如“Q8格式”就是保留了8位小数位的定点数.

    这种定点小数,做加减法时,需要小数点对齐,必要时需先做移位操作.

    乘除法时,也要掌握小数点位置.例如“Q8格式”和“Q4格式”的数相乘,其积应该看做“Q12格式”的.

    需注意C语言中的移位操作中,其“右移”分为“算术右移”和“逻辑右移”两种.对于“有符号”数,实行的是“算术右移”,对于“无符号数”,实行的是“逻辑右移”.

    如果您的程序中定义变量类型时定义的正确,那么你这些右移操作就不会错误.

    如果您的程序中有“无符号”和“有符号”混用的地方,或强制类型转换的地方,需要注意这点不要出错.

    “算术右移”和“逻辑右移”的区别:

    “逻辑右移”时最高位一律补零.

    “算术右移”时最高位保持不变,即:负数补1,正数补零.

    例如,用Q4的格式来表示0.75,放大2的4次方倍,为12,

    机器码是0000000000001100

    可以看做是定点小数000000000000.1100

    另,用Q4的格式来表示-0.75,放大2的4次方倍,为-12,

    机器码是1111111111110100

    可以看做是定点小数111111111111.0100

    如上,按Q4格式,用12代表0.75,用-12代表-0.75.

    要做(0.75)×(-0.75)用(12)×(-12)代表,乘得(-144).

    -144的机器码是1111111101110000

    看做Q8格式的定点小数11111111.01110000

    可以代表-0.5625.(等于-144/256,即-9/16)

    假如下面又要做别的运算,需要把这个Q8的定点小数化为Q4格式,那么,可以用>>4的运算,把这个数“算术右移”4位,得111111111111.0111.(这个数,如果当普通整数看,就是-9.)

    请注意这里右移的时候最高位补了4个1.

    【给我一段二进制补码,我怎么将其还原成十进制的数值?】

    首先,要知道其字长.以16位字长为例:

    16位字长如果是无符号数,可以表达的十进制数的范围是0 ~65535;

    如果是有符号数,可以表达的十进制数范围是-32768 ~ +32767.

    这里65536是2的16次方,32768是2的15次方.

    正整数的二进制化十进制想您应该知道吧?例如10010000化为十进制就是

    ((((((1×2+0)×2+0)×2+1)×2+0)×2+0)×2+0)×2+0 = 144

    给你一个有符号数的补码表示法的16位二进制代码,暂时先按照上述无符号数(即正整数)的规则,化为十进制;

    然后,看其符号位(最高二进制位)是否是1:

    如果是0,就表示它是正数.结果就对了.

    如果是1,就表示它应是负数,将此暂时值再减去65536,所得结果(负数)就是应有的结果了.

    上述“看其符号位是否是1”的判断,也可以代之以“看暂时值是否不小于32768”.

    例如:1111111111110111按照上述规则,得暂时值为65527.

    因为符号位是1,说明它应该是负数:65527 - 65536 = -9.

    对于n位二进制有符号补码除法x/y,要求不溢出的条件如下图,求解释为什么不溢出的条件是这样的

    y在分母,分母不能为0,就是y≠0了。这和数学当中的要求是一样的,编程时也要用条件语句来判断,然后再计算。

    C语言求二进制补码?源代码

    输入任意整数,输出32位的补码。

    输入其他,结束程序。

    #include

    int main()

    {

    int i,num=0;

    char s[33]={0};

    while(1==scanf("%d",&num)){

    for(i=0;i<32;i++){

    s[i]= (0x01 & (num>>(31-i))) ? '1' : '0' ;

    }

    printf("%s\n",s);

    }

    return 0;

    }

    展开全文
  • C语言二进制补码过程中取反后再加1,那个1是怎么加的?跪求!以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!C语言二进制补码过程中取反后再...

    C语言中二进制求补码过程中取反后再加1,那个1是怎么加的?跪求!以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

    d9d84aa693325db1abd4f5f88d3605c5.png

    C语言中二进制求补码过程中取反后再加1,那个1是怎么加的?跪求!

    可以通过如下2个实例来看看二进制中求补码的过程。

    实例1:求5的补码

    说明:对于正数,其源码、反码和补码均相同。

    5的源码:0000 0101

    5的反码:0000 0101

    5的补码:0000 0101

    实例1:求-5的补码

    说明:对于负数,其反码是源码各位取反(不包括符号位),其补码是反码加1。

    -5的源码:1000 0101

    -5的反码:1111 1010 (源码的各位取反,不包括符号位(最高位))

    -5的补码:1111 1011 (反码加1,即在最低位加1)

    C语言中二进制求补码过程中取反后再加1,那个1是怎么加的?

    二进制运算当然是在二进制数字间的运算。正数的补码等于原码,负数的补码就是取反加一(符号位不动)。举个“栗子”:

    求-7的补码。

    因为给定数是负数,则符号位为“1”。

    后七位:-7的原码(10000111)→按位取反(11111000)(负数符号位不变)→加1(11111001 加在末尾了),所以-7的补码是11111001。

    如果末位为1,加1后要进位,即‘10’。二进制只有0和1,不会出现‘2’的。

    c语言中二进制补码问题

    32767=2的15次方-1 = 01111111 11111111 你怎么得来的“原码是1100000000001001”??

    原码:人为规定的一种数据概念,最高位为符号位,其余位为数值位,实际应用中不用

    反码:也是人为规定的数据概念,正数原码即是反码,负数反码:符号位不动,数值位按位取反,实际应用中不用

    补码:计算机中实际存储数据的格式,真正的数据应用。

    正数的原码即是补码

    负数的补码是反码+1

    c语言中的二进制补码

    (1)正数的补码:与原码相同。

    (2)负数的补码:符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。

    1+1=? C语言中二进制的算法

    等于10,二进制以2为整

    14的二进制原码,取反,再加1得其补码,我知道原码,想知道取反是怎么算出来,再加1得其补码,就是想知道

    假如是负数,反码就是原码表示符号的最高位不变,0变成1,1变成0。补码就是在原码的基础上再加1。

    假如是正数,那么原码、反码、补码都跟原码相同 不用再进行上述处理。

    你说的14 是正数,不用进行取反再加1来计算其补码,它的补码就是00001110

    c语言中,原码补码反码都必须是二进制吗?

    不需要,求补码是一种运算,参与运算的数值是整数就可以,不需要是二进制。但是计算机在内部处理的时候是转换成二进制进行处理的。C语言可以计算15的反码为-16,这个按照反码的定义是对的。代码如下:

    #include

    int main(void) {

    int a,b;

    a = 15;

    b = ~a;

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

    return 0;

    }

    c语言 二进制补码加法程序怎么写?

    转化成补码就加呗

    1 + 2 = 3

    1 的补码 + 2 的补码 = 3 的补码

    0001 + 0010 = 0011

    C语言中二进制全1什么意思

    多少位都是1,如8位全是1,那正数就是0xff

    ~

    C语言求二进制补码 源代码

    输入任意整数,输出32位的补码。

    输入其他,结束程序。

    #include

    int main()

    {

    int i,num=0;

    char s[33]={0};

    while(1==scanf("%d",&num)){

    for(i=0;i<32;i++){

    s[i]= (0x01 & (num>>(31-i))) ? '1' : '0' ;

    }

    printf("%s\n",s);

    }

    return 0;

    }

    分页:123

    展开全文
  • 输出二进制补码问题

    2020-04-13 22:39:34
    蒜头君有一个 int\text{int}int 的整数,输出它的 323232 位二进制补码。 输入格式 一个整型整数。 输出格式 输出一行,即该整数的补码表示。 输出时每行末尾的多余空格,不影响答案正确性 样例输入: 7 样例输出 ...

    这道题看百度上的题解把我看蒙了,想了半天没想通,直到我看见在计算机中负数是用补码来表示的,我才恍然大悟,咋把这个给忘了(抓狂)

    题目

    蒜头君有一个 int\text{int}int 的整数,输出它的 323232 位二进制补码。

    输入格式

    一个整型整数。

    输出格式

    输出一行,即该整数的补码表示。

    输出时每行末尾的多余空格,不影响答案正确性

    样例输入:

    7

    样例输出

    00000000000000000000000000000111

    分析:

    做这道题就是明白一点:计算机中负数用补码来表示,因为整数补码是本身,所以这道题其实就是输出一个数在计算机中的二进制形式,超级简单了

    code

    #include<iostream>
    #include<stdio.h>
    using namespace std;
    int map1[110][110],map2[110][110];
    int main()
    {
      int n;
      cin>>n;
      for(int i=31;i>=0;i--){
        cout<<((n>>i)&1); //输出这一位的数
      }
    }
    

    补充

    传送门

    %i的作用

    %i和%d区别在scanf中,%i功能更强大,能根据输入的形式转换成十进制并赋值给变量,比如下面程序:

    int n;
      scanf("%i",&n);
      cout<<n;
    }
    

    输入0X10,输出16,输入0010输出8(八进制)

    c语言不能直接表示二进制,没有数字前缀表示

    itoa函数

    传送门

    C语言中可以用%o %d/%i %x输出8 10 16进制的数但是没有二进制的输出字符,但是有itoa的函数,

    注意: 计算机中负数用补码表示,所以itoa函数求出的负数也是补码形式

    函数原型:

    char *itoa( int value, char *string,int radix); [1] 
    原型说明:
    value:欲转换的数据。
    string:目标字符串的地址。
    radix:转换后的进制数,可以是10进制、16进制等。
    

    参考代码:

    1

    #include <stdlib.h>
    #include <stdio.h>
    int main(void)
    {
        int number = 12345;
        char string[32];
        itoa(number, string, 10);
        printf("integer = %d string = %s\n", number, string);
        return 0;
    }
    

    2

    /* itoa example */
    #include <stdio.h>
    #include <stdlib.h>
    int main (){
        int i;
        char buffer[33];
        printf ("Enter a number: ");
        scanf ("%d",&i);    //输入整数i
        itoa (i,buffer,10);    //将i转化为10进制数,存到buffer中
        printf ("decimal: %s\n",buffer);    //输出打印buffer
        itoa (i,buffer,16);    //将i转化为16进制数,存到buffer中
        printf ("hexadecimal: %s\n",buffer);    //输出打印buffer
        itoa (i,buffer,2);    //将i转化为2进制数,存到buffer中
        printf ("binary: %s\n",buffer);    //输出打印buffer
        return 0;}
    OUTPUT:
    Enter a number: 1750
    decimal: 1750
    hexadecimal: 6d6
    binary: 11011010110
    

    注意事项

    itoa() 函数有3个参数:第一个参数是要转换的数字,第二个参数是要写入转换结果的目标字符串,第三个参数是转移数字时所用的基数(进制)。在上例中,转换基数为10,就意味着以10为转换进制。10:十进制;2:二进制…

    itoa 并不是一个标准的C函数,它是Windows特有的,如果要写跨平台的程序,请用sprintf。

    标准库中有sprintf,功能比这个更强,用法跟printf类似:

    char str[255];

    sprintf(str, “%x”, 100); //将100转为16进制表示的字符串。

    下列函数也可以将相应类型的整数转换为字符串:

      将无符号整型数value转换成字符串并返回该字符串,radix为转换时所用基数
      char *ltoa(long value,char *string,int radix)
      将长整型数value转换成字符串并返回该字符串,radix为转换时所用基数
      char *itoa(int value,char *string,int radix)
      将整数value转换成字串存入string,radix为转换所用基数.
      double atof(char *nptr)
      将字符串nptr转换成双精度数,并返回这个数,错误返回0
      int atoi(char *nptr)
      将字符串nptr转换成整型数, 并返回这个数,错误返回0
      long atol(char *nptr)
      将字符串nptr转换成长整型数,并返回这个数,错误返回0
      double strtod(char *str,char **endptr)
      将字符串str转换成双精度数,并返回这个数,
      long strtol(char *str,char **endptr,int base)
      将字符串str转换成长整型数, 并返回这个数
    

    ok,又11点多了,哎!啥也不是

    展开全文
  • 十进制转二进制补码(正负都可) 指针初学 将一个十进制正(负)整数转换为对应的二进制补码(用指针完成 十进制转二进制:1.先判断该整数是正数还是负数 如果是正数则二进制补码首位为1 , 且对应的二进制补码就是原. 如果...

    十进制转二进制补码(正负都可) 指针初学

    将一个十进制正(负)整数转换为对应的二进制补码(用指针完成

    十进制转二进制:1.先判断该整数是正数还是负数 如果是正数则二进制补码首位为1 , 且对应的二进制补码就是原. 如果是 负数 则二进制补码为原码基础上取反且末位加1(加1则涉及进位 )

    代码:

    #include"stdio.h"
    #include"Stdio.h"
    int main()
    {
    	int *p;
    	int x,i;
    
    	printf("输入一个十进制整数:");
    	scanf_s("%d", &x);
    
    	p = (int *)malloc(sizeof(int) * 32);//为二进制分配内存空间
    
    	if (x < 0)//负数转正  如果为负数 二进制第一位为1 正数则为0
    	{
    		*p = 1;
    		x = -x;
    	}
    	else if (x > 0)    *p = 0;
    	//判断正负    改首位
    	//-----------------------------------------------------------------------
    	for(i=31;i>=1;i--)//原码
    	{
    		*(p+i) = x % 2;
    		x = x / 2;
    	}
    	//-----------------------------------------------------------------------
    
    	//二进制取补码规则;若x为负数则 源码换反码 且反码末位加1
    	if (*p == 1)//换反码
    	{
    		for (i = 1; i <=31; i++)
    		{
    			if (*(p+i) == 1)       *(p + i) = 0;
    			else				   *(p + i) = 1;
    		}
    	}
    
    	if (*p == 1)//负数
    	{
    		if (*(p+31) == 0)	*(p + 31) = 1;//最后一位为0 则直接加1
    		else if (*(p + 31) == 1)      //最后一位为1   进位 
    		{
    			for (i = 1; i <= 31; i++)
    			{
    				if (*(p + 31) + 1 == 2 )//逢2进1
    				{
    					*(p + 31) = 0;
    					*(p +30) += 1;
    				}
    				else if (i > 0 && *(p + i) == 2)
    				{
    					*(p + i) = 0;
    					*(p + i+1) += 1;
    				}
    			}
    		}
    	}
    
    	//-----------------------------------------------------------------------
    	for (i = 0; i <= 31; i++)//输出
    	{
    		printf("%d", *(p + i));
    	}
    	printf("\n");
    
    	system("pause");
    	return 0;
    }
    

    运行测试:

    测试: 5 结果:000000000000000000000000000101

    测试   -5

    测试: -5 结果:11111111111111111111111111111011

    测试   -5

    测试: -7 结果:11111111111111111111111111111011

    测试  -7

    初学阶段,算法可能有问题,不妥的多提意见…

    参考资料:

    1.十进制转换为二进制、原码、反码、补码、移码.
    2.二进制补码 百度百科.

    展开全文
  • 补码与反码在计算机中对数据进行运算操作时,符号位该如何表示呢?是否也同数值位一道参加运算操作呢??如果参加,会给运算操作带来什么影响呢???为了妥善地处理好这些问题,就产生了把 符号位 和 数值位 一起来...
  • 四:二进制补码二进制: 数码:0,1基数:2二进制数的权展开式:(101.01) = 1*2²+0*2¹+1*2⁰+0*2⁻¹+1*2⁻²十进制转化为二进制: 除以二逆向取余法十进制转化为二进制(小数):乘以二顺向取整法在汇编中,在...
  • 二进制运算(正码、反码、补码)机器数(机器存储的数)​ 一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1//比如byte类型是一个字节...
  • 补码: 整数补码:一个字节为例 ...结果:-127 的二进制补码为 10000001 2变10进制:例如:11111111 过程: 1.最高位归零 01111111 2.除最高位都取反 00000000 3.加1,转10进制 00000001 1 结果:11111111 是 -
  • c语言二进制数15.1.2 有符号整数有符号数的表示方法是由硬件决定,而不是由 C 决定的.或许表示有符号数最简单的方2018-8-21来自ip:13.186.169.154的网友咨询浏览量:200问题补充:c语言二进制数15.1.2 有符号整数...
  • 原码、反码、补码。本文列举了运用C语言操作符,列举三种求二进制补码中1的个数。
  • 174-C语言入门(进制补码,类型)

    千次阅读 2021-02-05 18:15:13
    进制 进制以十进制为例 1234.5=110^3 + 210^2 + 310^1 + 410^0 + 5*10^-1 (按权展开求和) ○1 其它进制转十进制都是按权展开求和,比如十六进制 0x123=1 * 16^2 + 2 * 16^1 + 3 * ...○5 二进制转十六进制:二进制从右
  • 二进制数据虽然可以直接被CPU计算识别,但是不方便书写、记录,把二进制数据转换为八进制是为了方便记录在文档中。 随着CPU的位数不断的增加,由早期的8位逐渐发展成了现在的64位,因此八进制就不能满足需要了,所以...
  • 比如05,0237所以C语言没有二进制输入,最多可用函数去实现。八进制数的表达方法C/C++规定,一个数如果要指明它采用八进制,必须在它前面加上一个0(数字0),如:123是十进制,但0123则表示采用八进制。这就是八进制数...
  • 有这样一道题目 ``` int main() ...题目最后的答案是输出-1 ...在网上查了相关资料,说是关于补码与原码转换的 ...疑问3:自减符号是不是在二进制运算上相当于原来的补码加了个负一的补码? 求大佬解答
  • 要得到一个二进制补码数的相反数,最简单的方法是反转每一位(即0变为1,1变为0),然后加1。因为1是00000001,那么−1则是11111110+1,或11111111。这与上面的介绍一致。 二进制反码(one’s-complement)方法通过反转...
  • 本文参考:https://blog.csdn.net/wn084/article/details/79963979原码:所谓原码就是机器数,是加了一位符号位的二进制数(因为数值有正负之分),正数符号位为0,负数符号位为1.计算机中存储、处理、运算的数据通常是...
  • 二进制补码为什么是原码取反加一

    千次阅读 2020-03-23 20:37:09
    二进制补码为什么是原码取反加一、补码,反码。
  • 要求将文件中二进制补码立即数转为十进制数,写的时候本来想偷个懒找一段,没搜到。 照着一位仁兄的改了改,改成了补码的。 参考: C语言把二进制转换为十进制数的方法和示例 代码如下:注释简单解释了下 #include&...
  • 最近在做一个C的嵌入式项目,发现在C语言中用printf()函数打印字符型变量时,如果想采用"%x"的格式将字符型变量值以十六进制形式打印出来,会出现一个小问题,如下:charbuf[10]={0};buf[0]=0xbf;printf("%2x\n\n\n...
  • 关于计算机世界的二进制 首先,问一个基本的问题。 负数在计算机中如何表示? 举例来说,+8在计算机中表示为二进制的1000,那么-8怎么表示呢? 很容易想到,可以将一个二进制位(bit)专门规定为符号位,它等于0时就...
  • 二进制补码的特性

    千次阅读 2010-08-07 17:14:00
    C语言是一种较接近机器底层的语言,但它的语言标准中并没有规定有符号数要用二进制补码来表示;可事实上几乎所有平台上有符号数都用二进制补码来表示,它已成为“事实上的标准”,这无疑源于二进制补码巧妙的设计,...
  • 二进制 位运算符 & :按位与 相对应的二进制位:都为1才为1,否则为0 | :按位或 相对应的二进制位:有1为1,否则为0 ^ : 按位异或 相对应的二进制位:相同为0,不同为1 ~ :按位取反 相对应的二进制位:0变1,1...
  • 1. 在计算机里,通常用数字后面紧跟一个英文字母来表示该数的数字,十进制一般用D,二进制用B,八进制用O,十六进用H来表示,2.首先,十进制数转换成二进制,除2取余,按箭头方向写,自上而下写出来,所以45D转换成...
  • /**** Copyright(C) 2011, SKYCNC* All rights reserved** 程序名称:dec_to_bin_oct_hex* 功 能:输入一个十进制数,将其转化为二进制、八进制、十六进制** 作 者:zhanghbboy* 完成日期:11.07.27****/#include#...
  • 本篇文章是我的第一篇博客,用于帮助那些和我一样处于迷茫中的朋友。如若对你有帮助的话请点个赞(不介意的可以投个币)。如若引用还请注明出处!...如果我想用八位二进制补码表示怎么办? 答案是从
  • 想要在一个16位的补码中无视多余位,找出可以表示该带符号整数二进制补码的最少位数,我们需要的运用到C语言中一个非常有用的算法思想——拆半查找。 拆半查找: 搜索过程从数组的中间元素开始,如果中间元素正好是...
  • 二进制补码

    2013-08-04 10:56:00
    计算机只能处理2进制数据(经常是补码!),计算机内部没有10... 计算机不认识正负数,所以原本二进制是没有负数的,但因为运算需要,正负二进制是人为规定的,所以才有了补码(补充的码)。  计算机在输入输出...
  • C语言实现二进制运算器

    千次阅读 2019-04-26 23:02:44
    先将输入的两个二进制数转换成十进制,然后再进行相应的运算,最后将结果转换成二进制的形式打印。 运行逻辑示意图 函数调用示意图 源码: #include <stdio.h> #include <string.h> #include <...
  • C语言——十进制转化为二进制

    千次阅读 2017-05-28 21:52:00
    十进制转化为二进制:将十进制一直除以二,然后用数组储存余数,并取商,如此循环直到十进制数小于零。 #include void main() {  short int n;  int a[30],i=0; //定义一个数组 用来存储二进制数  for(i=...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,256
精华内容 5,302
关键字:

c语言输出二进制补码

c语言 订阅