【C语言】输入一个整数,求它的原码,反码,补码值

 1 #include<stdio.h>
 2 #include<math.h>
 3 int main()
 4 {
 5     int m,n,a[10],i=0,y[100],f[100],b[100],j,k;
 6     printf("请输入一个整数:");
 7     scanf("%d",&n);
 8     m=abs(n);
 9     while (m!=0)
10     {
11         a[i]=m%2;
12         m=m/2;
13         i=i+1;
14     }
15     if (n>=0)
16     {
17         for(j=0;j<i;j++) y[j]=a[j];
18         if ((j+1)%8!=0) for(;(j+1)%8!=0;j++)  y[j]=0;
19         y[j]=0;
20         for(k=0;k<=j;k++)
21         {
22             f[k]=y[k];
23             b[k]=y[k];
24         }
25     }
26     else
27     {
28         int w=0;
29         for(j=0;j<i;j++)    y[j]=a[j];
30         if ((j+1)%8!=0) for(;(j+1)%8!=0;j++)  y[j]=0;y[j]=1;
31         for(k=0;k<j;k++)    if(y[k]) f[k]=0;else f[k]=1;f[k]=1;
32         for( k=0;k<j;k++)    {if (k==0)b[k]=f[k]+1;else b[k]=f[k]+w;if (b[k]==2){b[k]=0;w=1;}else w=0;}b[k]=1;
33     }
34     printf("原码:");for(k=j;k>=0;k--)printf("%d",y[k]);printf("\n");
35     printf("反码:");for(k=j;k>=0;k--)printf("%d",f[k]);printf("\n");
36     printf("补码:");for(k=j;k>=0;k--)printf("%d",b[k]);printf("\n");
37 }

原文地址:https://www.cnblogs.com/ieybl/p/9161622.html

时间: 2024-07-30 06:55:16

【C语言】输入一个整数,求它的原码,反码,补码值的相关文章

C语言原码反码补码与位运算.

目录: 一.机器数和真值     二.原码,反码和补码的基础概念     三.为什么要使用原码,反码和补码     四.原码,补码,反码再深入     五.数据溢出测试     六.位运算的运算说明     七.位运算的简单应用   一.机器数和真值 机器数(computer number)是数字在计算机中的二进制表示形式 机器数有2个特点:一是符号数字化,二是其数的大小受机器字长的限制 比如:十进制中的+6,计算机字长为8位,转换成二进制就是00000110,如果是-6,就是10000110

C语言基础(4)-原码,反码,补码及sizeof关键字

1. 原码 +7的原码是0000 0111 -7的原码是1000 0111 +0的原码是0000 0000 -0的原码是1000 0000 2. 反码 一个数如果值为正,那么反码和原码相同. 一个数如果为负,那么符号位为1,其他各位与原码相反 +7的反码0000 0111 -7的反码1111 1000 -0的反码1111 1111 3. 补码 原码和反码都不利于计算机的运算,如:原码表示的7和-7相加,还需要判断符号位. 正数:原码,反码补码都相同 负数:最高位为1,其余各位原码取反,最后对整个

C语言 原码--反码--补码

//原码,反码,补码 #include<stdio.h> #include<stdlib.h> //数值的表示方法——原码.反码和补码 //原码:最高位为符号位,其余各位为数值本身的绝对值 //反码: //正数:反码与原码相同 //负数:符号位为1,其余位对原码取反 //补码: //正数:原码.反码.补码相同 //负数:最高位为1,其余位为原码取反,再对整个数加1 // // //在计算机系统中,数值一律用补码来表示(存储). //主要原因:使用补码,可以将符号位和其它位统一处理:

02.15_Java语言基础(原码反码补码的讲解).avi

c语言中的原码,补码,反码的小结。

1.正数(符号位为0)的原码=反码=补码. 2.负数(符号位为1)由原码到补码:原码符号位1不变(即先求绝对值的原码,将符号位变为1),其余取反,得到反码,再加1,得到补码. 重点:补码的表示方式有8位2进制,16位,32位,64位,这与c语言关键字表示的数值范围有关系. 3.对一个整数的补码再求补码,等于该整数自身. 4.模的概念:略. 例子:时钟的计量范围为0到11,模为12.表示n位计算机计量范围为0到2^(n)-1,模为2^(n).        在以模为12的系统中,加8和减4效果都是

输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数

题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数.例如输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次. 分析:首先最先想到的是遍历从1到n的每个数,判断每个数中包含1的个数,再相加. 时间复杂度:如果输入数字为n,n有O(logn)位,我们需要判断每个数字的每一位是不是为1,所以时间复杂度为O(n*logn).如果输入数字很大的时候,就需要大量的计算,效率不高. 接下来观察规律: 从个位到最高位,我们判断每一位1出现的次数.比如 对于数2

【微软100题】输入一个整数,求该整数的二进制表达中有多少个1

package test; /** 整数的二进制表示中1的个数 题目:输入一个整数,求该整数的二进制表达中有多少个1. 例如输入10,由于其二进制表示为1010,有两个1,因此输出2. 分析: 方法一:把十进制转换成二进制字符数组,遍历该数组,判断1的个数. 方法二:对于一个int n, n&1的结果就是n转化成二进制数后的最后一位的结果.考察了位运算 包括微软在内的很多公司都曾采用过这道题. * @author Zealot * */ public class MS_28 { private

【C语言】输入一个整数,输出该数二进制表示中1的个数(三种方法)

输入一个整数,输出该数二进制表示中1的个数.如输入32,输出1. 代码实现: 方法1:与运算 #define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; int FindOneNumber(unsigned int num) {     int numberofOne = 0;     while (num)     {         num = num & (num - 1);         

【c语言】输入一组整数,求出最大子序列的和

// 输入一组整数,求出最大子序列的和. // 例如:序列: - 2 11 - 4 13 - 5 - 2,则最大子序列和为20. // 序列: - 6 2 4 - 7 5 3 2 - 1 6 - 9 10 - 2,则最大子序列和为16 #include <stdio.h> int Max_Son(int *p, int len) { int Max_Sum = 0; int i, j; for (i = 0; i < len; ++i) { int sum = 0; for (j = i