精华内容
下载资源
问答
  • 为什么二进制整数变负数的时候,需要在反码上 +1 举个例子 1的负数是-1,-1 + 1时,结果为0, 此时我们用二进制来演算一下, 1的二进制是0001,0的二进制是0000, 此时将1的二进制进行取反,1110(如果用这个当做-1的...

    为什么二进制整数变负数的时候,需要在反码上 +1
    举个例子
    1的负数是-1,-1 + 1时,结果为0,
    此时我们用二进制来演算一下,
    1的二进制是0001,0的二进制是0000,

    此时将1的二进制进行取反,1110(如果用这个当做-1的二进制会发生什么),

    如果用1110代表-1,那么+1后,结果应该是0000,也就是10进制中的0,

    1110 + 1 = 1111

    当直接用反码进行计算时,发现并不是这么回事,而是变成了1111,而当1111再次进行加1时,
    由于二进制的进位,所有的1都满足2都变成0,超过4位的被丢弃,此时二进制才变为了0000,
    负数的加法多了一步,

    而当 0001 变为反码 1110后,直接+1,成为 1111,

    随后我们使用 1111 + 1 时,就很自然的变为0了,

    这就是二进制整数变负数时反码需要+1的原因了,

    自然二进制负数转换为正数时,需要将之前+1的操作流程反着来一遍,

    1111 - 1 = 1110

    随后 1110 取反,变为 0001,成为正数。

    展开全文
  • 二进制整数转换为十进制整数 【问题描述】 编写程序,输入字符串形式的二进制整数(长度为16位,采用补码表示),把它转换为十进制整数,输出该十进制整数。补码首位表示符号,0代表正数,1代表负数。 需要注意的是...

    二进制整数转换为十进制整数

    【问题描述】

    编写程序,输入字符串形式的二进制整数(长度为16位,采用补码表示),把它转换为十进制整数,输出该十进制整数。补码首位表示符号,0代表正数,1代表负数。

    需要注意的是:求负整数的补码,将其对应正数二进制表示所有位取反(包括符号位,0变1,1变0)后加1。

    【输入形式】

    输入一个16位补码表示的二进制整数
    【输出形式】

    二进制整数对应的十进制数
    【样例输入】

    0000000000001101

    【样例输出】

    13

    算法实现

    #include <iostream>
    using namespace std;
    int transport(char*a);//定义函数转换
    int gety(int a, int b)//定义函数求幂
    {
    int c=1;
    while(b--)
    	c=c*a;
    return c;
    }
    int getz(char*a)//定义函数负整数的补码转换
    {
    for (int i = 15; i >= 0;i --)
    {
    if (*(a+i)=='0')
    	*(a+i)='1';
    else *(a+i)='0';
    }
    *(a+15)+=('1'-'0');
    for (int i = 15; i >= 0;i --)
    {
    if (*(a+i)=='2')
    {
    *(a+i)='0';
    *(a+i-1)+=('1'-'0');
    }
    
    }
    return 0;
    }
    
    int transport(char*a)
    {
    int value=0;
    if (*a=='0')
    {
    for (int i = 15; i >= 0;i --)
    {
    if (*(a+i)== '1')
    value += gety(2,15-i); 
    }
    }
    else
    {
    getz(a);
    for (int i = 15; i > 0;i --)
    {
    if (*(a+i)== '1')
    value += gety(2,15-i); 
    }
    value=0-value;
    }	
    	
    	return value;
    }
    
    
    int main()
    {
    char a[17];
    cin.get(a,17);
    cout<<transport(a)<<endl;
    return 0; 
    } 
    

    第一次用博客,希望大家能多多包含,写的不好的地方欢迎提建议

    展开全文
  • 7 = 0000,0000,0000,0000,0000,0000,0000,0111 -7 原码: 1000,0000,0000,0000,0000,0000,0000,0111 反码: 1111,1111,1111,1111,1111,1111,1111,1000 补码: 反码+1 = 1111,1111,1111,1111,1111,1111,1111,1001
    7 = 0000,0000,0000,0000,0000,0000,0000,0111
    -7 原码: 1000,0000,0000,0000,0000,0000,0000,0111
    反码: 1111,1111,1111,1111,1111,1111,1111,1000
    补码: 反码+1 = 1111,1111,1111,1111,1111,1111,1111,1001
    展开全文
  • 原码:符号位+n位数值位反码:将原码的符号位不变,其余位取反补码:反码+1=补码正数的原码、反码、补码都相同一、十进制整数转换为二进制数采用除2取余的方法:1.用2去除十进制整数,得到一个商数和一个余数;2.再...

    原码:

    符号位+n位数值位

    反码:

    将原码的符号位不变,其余位取反

    补码:

    反码+1=补码

    正数的原码、反码、补码都相同

    一、十进制整数转换为二进制数

    采用除2取余的方法:

    1.用2去除十进制整数,得到一个商数和一个余数;

    2.再用2去除新得到的商数,又会得到一个商数和余数;

    3.反复进行直到商数为0为止;

    4.把最后得到的余数作为二进制数的最高位

    5.把最先得到的余数作为二进制的最低位

    6.依次排列即可得到结果

    #include<bits/stdc++.h>
    using namespace std;
    int p[10];
    int main()
    {
    	int n;//十进制数
    	int w;//宽度为 8位 	
    	while(cin>>n>>w)
    	{
    		if(n>=0)
    		{
    			vector<int> v;
    		while(n)
    		{
    			v.push_back(n%2);
    			n/=2;
    		}
    		int size=v.size();
    		if(size<w)
    		{
    			for(int i=0;i<w-size;i++)
    			v.push_back(0);
    		}
    		reverse(v.begin(),v.end());
    		for(int i=0;i<w;i++)
    		printf("%d",v[i]);
    		printf("\n");
    		}
    	else {
    		n=-n;
    		vector<int> v;
    		while(n)
    		{
    			if(n%2==1)
    			v.push_back(0);
    			else if(n%2==0)
    			v.push_back(1);
    			n/=2;
    		}
    		int size=v.size();
    	
    		if(size<w)
    		{
    			for(int i=0;i<w-size;i++)
    			v.push_back(1);
    		}
    		
    		v[0]++;		
    		for(int i=0;i<w;i++)
    		{
    			if(v[i]>=2)
    			{
    				v[i]=v[i]%2;
    				v[i+1]++;
    			}
    		}
    		reverse(v.begin(),v.end());
    		
    		for(int i=0;i<w;i++)
    		printf("%d",v[i]);
    		printf("\n");
    	}
    	}
    	return 0;
    } 

    二、二进制转换为十进制数

    方法:按照其位权展开,然后将各部分相加

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
    	string s;
    	
    	while(cin>>s)
    	{
    	long long ans=0;
    	 int len=s.length();
    		if(s[0]=='0')//正数 
    		{			
    			for(int i=1;i<len;i++)
    			{
    				ans=ans+pow(2,len-i-1)*(s[i]-'0');
    			}
    		}else{
    			cout<<"-";
    			for(int i=0;i<len;i++)
    			{
    			if(s[i]=='0')
    			s[i]=1;	
    			else
    			s[i]=0;
    			}
    			reverse(s.begin(),s.end());
    			s[0]++;
    			for(int i=0;i<len;i++)
    			{
    				if(s[i]>=2)
    				{
    					s[i]=s[i]%2;
    					if(i+1<len)
    					s[i+1]++;
    				}
    			 }
    			 for(int i=0;i<len;i++)
    			 ans=ans+pow(2,i)*s[i];
    		}
    		cout<<ans<<endl; 
    	 } 
    	return 0;
    } 

    展开全文
  • 比如:十进制转二进制 二:【小数】十进制转任意进制:辗转相乘取余,取出整数部分,直到小数的十分位为0为止,倒叙输出整数部分 比如:十进制转二进制0.36 三:【整数】任意进制转十进制:从最后一位倒叙开始,...
  • * 从键盘输入某个十进制整数数,转换成对应的二进制整数并输出。 */ public class DecToBin { static StringBuffer binNum = new StringBuffer();//全局变量,确保每次拼接用的是同一个 static...
  • 十进制整数转二进制 ...二进制整数转换器 十进制浮点数转IE754格式二进制 IE754格式二进制 S 符号位:     1 表示negative负数 ; 0表示 positive正数 Exponent(阶码):     规格化阶码范围为0000 0001 (-
  • * 从键盘输入某个十进制整数数,转换成对应的二进制整数并输出。 */ package TestQuestions; import java.util.Scanner; public class ThreeOne { public static void main(String[] args) { Scanner ...
  • 二进制码中负数如何表示? 整数的取值范围 整数数据类型包括:byte、short、int、long四种类型,以下分别为各类型取值范围: byte 的取值范围为-128~127(-27至27-1) ,占1个字节(8位); short 的取值范围为-...
  • 文章目录一、二进制、八进制、十六进制整数的书写1、二进制2、八进制3、十六进制4、需要注意的坑二、二进制、八进制、十六进制整数的输出四、版权声明 整数是我们生活中常用的数据类型,也是编程中常用的一种数据,...
  • java二进制正数和负数取反

    千次阅读 2017-08-05 19:50:03
    要弄懂这个运算符的计算方法,首先必须明白二进制数在内存中的存放形式,二进制数在内存中是以补码的形式存放的。 另外正数和负数的补码不一样,正数的补码、反码都是其本身,负数的反码是符号位不变
  • 二进制整数及其表达方式

    千次阅读 2019-09-29 21:42:33
    回去又复习了一遍计算机里面二进制整数的表示方式,主要分为3类:原码、反码和补码。 当然,我还是要在开头说明一下,计算机里都是以补码的形式储存数据。 原码 这种方式最好理解,将我十进制的“逢十进一”换成二...
  • 浅谈二进制中的负数

    千次阅读 2019-02-10 14:15:28
    有了上面的铺垫,二进制负数已经呼之欲出啦~符号位天然可以作为正负数的分割点。还是以 Java 的 byte 类型为例,8 位一共可以表示 256 个数字,由于 0 表示为  00000000 ,首位符号位也是 0,因而正数少一位,...
  • 任意输入一个十进制整数,包括正数负数,通过程序实现可以输出相应的二进制编码
  • 最近在做一个关于带符号二进制整数转十进制的一个小case,去网上搜了很多,发现现有的程序不是很复杂就是写的让人看得不是很明白,针对这个过程,自己写了两个比较简单易懂的函数去实现。 def add_1(binary_inpute):...
  • Java实现十进制整数二进制的转换 如果想通过自己的代码来实现二进制转换,可使用此段代码,该代码通过输出的字符来表示二进制形式,另外要注意如果想了解该代码的思路。建议先了解计算机组成原理里的原码,反码...
  • 小古银的官方网站(完整教程):http://www.xiaoguyin.com/ ... 目录 目录 ...正负数转换 ...前面已经讲过二进制整数的关系,现在再补充一下。我们知道数据都是使用二进制保存和处理的,而二进制没有...
  • 进制整数转化为二进制详解

    万次阅读 多人点赞 2017-04-02 20:26:49
    要想编写十进制转化成二进制的带码首先要清楚十进制转化成二进制的算法,下面我们从两个方面实现这个转化: 1.按照十进制转化成十进制的常规算法实现: 废话不多说直接上图:
  • 1、常规方法:十进制到二进制的转化需要使用到数学中的短除法,将正的十进制整数除以二得到商,再除以二,同时在右侧标注好余数,一直除到商为0为止。然后将得到的余数,自下向上的写出来。这时候得到的01串就是我们...
  • 整数转化为二进制 1.正整数用源码表示 2.负整数用绝对值的补码表示(将绝对值取反+1) 如-50用50的补码表示 50的源码为00000000000000000000000000110010 反码则为11111111111111111111111111001101 补码为反码+...
  • 八位二进制的十进制整数范围

    千次阅读 2019-02-20 20:10:18
    八位二进制从 0000 0000 开头是0,为正数,所对应的十进制为0 0000 0001 为正数,所对应的十进制为1 0000 0002 为正数,所对应的十进制为2 . . . 到 0111 1111 为正数,所对应的十进制为127 1000 0000 开头是0,为...
  • 二进制整数的加,减运算

    千次阅读 2015-08-14 14:59:16
    二进制整数的加,减运算   前言 在平时的编程中,当进行整数运算时,经常会遇到一些奇怪的结果,比如两个正数相加出现了负数,两个负数相加出现了正数,这些都是因为数值表示的有限性导致的.来看一个案例:  int a = ...
  • Java_十进制整数转换为二进制

    千次阅读 2019-07-07 17:36:34
    Java_十进制正整数转换为二进制 方法1 字符串拼接 import java.util.Scanner; /* * 十进制转换为二级制 * @author Chill_Lyn * */ public class Convertion10To2 { public static void main(String[] args)...
  • 整数常量:所有整数(正数 负数 0) 小数常量:所有小数 布尔(boolean)常量:较为特有,有两个数值 ture false 字符常量: 将一个数字字母或者符号用单引号('')标识 (单引号里面只能放一个字符) 字符串常量:将一个或多个...
  • 8位二进制的数转为10进制:  正数:  比如1,一定要转为00000001(原码),高位是0(补码等于原码),直接计算得十进制1,  负数:  比如11111111(原码),最高位是1,表示负数;符号位不变其他位取反再加...
  • Java---将十进制整数转换为二进制

    千次阅读 2018-03-16 22:22:04
    import java.util.Scanner; //程序功能:将十进制整数转换为二进制数 public class Change { public static void main(String[] args) { Scanner in = new Scanner(System.in); ...
  • 移位运算,即:将二进制数向左或向右移动相应位数,为保证数据位数,空缺部分会进行相应的补齐。 毫无疑问,如果该数是正数,那么无论是向左移位或向右移位, 空缺位都应用0补齐,那么对于负数呢?我们知道负数的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 79,918
精华内容 31,967
关键字:

二进制整数变负数