记一次负数的二进制

这是去年的一个填空题,当然,只要知道换算二进制就完全没问题的~

  1 #include<iostream>
  2 #include<cstdio>
  3 using namespace std;
  4
  5 void to2(int x)
  6 {
  7     int flage = 0;
  8     flage = (x>0)?1:-1;
  9     if(x == 0) flage = 0;
 10     switch(flage)
 11     {
 12         case 0:cout<<"        ";break;
 13         case 1:{    // 正数二进制
 14             int s[8] = {0}, e = 7;
 15             while(x!=0)
 16             {
 17                 s[e] = x%2;
 18                 x /= 2;
 19                 e--;
 20             }
 21             for(int i=0;i<8;i++){
 22                 if(s[i] == 1) cout<<"*";
 23                 else cout<<" ";
 24             }
 25
 26             break;
 27         }
 28         case -1:{    // 负数二进制
 29             x = -x;
 30             int s[8] = {0}, e = 7;
 31             while(x!=0)
 32             {
 33                 // 取反码然后取补码
 34                 s[e] = ((x%2) == 1)?0:1;
 35                 x /= 2;
 36                 e--;
 37             }
 38             // 补码
 39             int t = 1;
 40             for(int i=7;i>=0;i--){
 41                 if(s[i] + t == 2){
 42                     s[i] = 0;
 43                     t = 1;    //进位了
 44                 }
 45                 else{
 46                     s[i] = s[i] + 1;
 47                     t = 0;    //不进位
 48                 }
 49             }
 50             for(int i=0;i<8;i++){
 51                 if(s[i] == 1) cout<<"*";
 52                 else cout<<" ";
 53             }
 54
 55             break;
 56         }
 57         defualt:break;
 58     }
 59 }
 60
 61 void show(int a[][32])
 62 {
 63     for(int i=0;i<10;i++){
 64         for(int j=0;j<32;j++){
 65             to2(a[i][j]);
 66             if((j+1)%2 == 0)
 67                 cout<<endl;
 68         }
 69         cout<<"-------------------"<<endl;
 70     }
 71 }
 72
 73 int main()
 74 {
 75     FILE *fp;
 76     int a[10][32] = {0};
 77     fp = fopen("test.txt", "r+");
 78     if(fp == NULL){
 79         // printf("NULL\n");
 80         return 0;
 81     }
 82     while(!feof(fp))
 83     {
 84         for(int i=0;i<10;i++)
 85             for(int j=0;j<32;j++){
 86                 fscanf(fp, "%d", &a[i][j]);
 87             }
 88     }
 89     fclose(fp);
 90     /*
 91     for(int i=0;i<10;i++){
 92         for(int j=0;j<32;j++){
 93             cout<<a[i][j]<<" ";
 94         }
 95         cout<<endl;
 96     }
 97     */
 98
 99     /*转换成8位二进制*/
100
101     show(a);
102     // 九的九次方等于多少......
103     getchar();
104     return 0;
105 }

下面是数据:


 1 4 0 4 0 4 0 4 32 -1 -16 4 32 4 32 4 32 4 32 4 32 8 32 8 32 16 34 16 34 32 30 -64 0
 2 16 64 16 64 34 68 127 126 66 -124 67 4 66 4 66 -124 126 100 66 36 66 4 66 4 66 4 126 4 66 40 0 16
 3 4 0 4 0 4 0 4 32 -1 -16 4 32 4 32 4 32 4 32 4 32 8 32 8 32 16 34 16 34 32 30 -64 0
 4 0 -128 64 -128 48 -128 17 8 1 -4 2 8 8 80 16 64 32 64 -32 64 32 -96 32 -96 33 16 34 8 36 14 40 4
 5 4 0 3 0 1 0 0 4 -1 -2 4 0 4 16 7 -8 4 16 4 16 4 16 8 16 8 16 16 16 32 -96 64 64
 6 16 64 20 72 62 -4 73 32 5 16 1 0 63 -8 1 0 -1 -2 0 64 0 80 63 -8 8 64 4 64 1 64 0 -128
 7 0 16 63 -8 1 0 1 0 1 0 1 4 -1 -2 1 0 1 0 1 0 1 0 1 0 1 0 1 0 5 0 2 0
 8 2 0 2 0 7 -16 8 32 24 64 37 -128 2 -128 12 -128 113 -4 2 8 12 16 18 32 33 -64 1 0 14 0 112 0
 9 1 0 1 0 1 0 9 32 9 16 17 12 17 4 33 16 65 16 1 32 1 64 0 -128 1 0 2 0 12 0 112 0
10 0 0 0 0 7 -16 24 24 48 12 56 12 0 56 0 -32 0 -64 0 -128 0 0 0 0 1 -128 3 -64 1 -128 0 0 

原文地址:https://www.cnblogs.com/mabeyTang/p/10420931.html

时间: 2024-11-09 02:42:33

记一次负数的二进制的相关文章

十进制负数转换为二进制、八进制、十六进制的知识分享

这篇文章主要介绍了十进制负数转换为二进制.八进制.十六进制的知识分享,需要的朋友可以参考下 程序猿们或许对二进制都不陌生,二进制是计算技术中广泛采用的一种数制.二进制数据是用0和1两个数码来表示的数.但是很多人都会将二进制转换成整数,但是如何用二进制表示负数呢?有的人会说,在二进制前面加个负数符合.而计算机只能认识0 和 1,又怎么去加个额外的负数符号呢?于是我们就需要用0和1来表示负数.如果想要弄懂这个,我们需要先了解什么是二进制原码. 原码是什么 原码(true form)是一种计算机中对数

Java整数占几个字节,以及负数的二进制表示方法,以及Java的逻辑运算符&gt;&gt;和&gt;&gt;&gt;的区别

Java整数占几个字节? 答:占4个字节,共32个比特位 1个字节占8个比特位(1B(byte)= 8 bit) 因此,类型和字节对应如下 byte 1 short 2 char 2 int 4 float 4 double 8 double  8 -----------------------------------------------------------------------以下是用System.out.println的SIZE输出-------------------------

JAVA中负数转二进制分析

最近在看集合源码,发现ArrayDeque里面用到了大量的&运算,这牵扯到了二进制.突然发现自己对负数的二进制有点模糊了,对此进行了一些支持补充. 首先我们要对原码.反码和补码有个了解: 1.所谓原码就是二进制定点表示法,即最高位为符号位,"0"表示正,"1"表示负,其余位表示数值的大小. 2.反码表示法规定:正数的反码与其原码相同:负数的反码是对其原码逐位取反,但符号位除外. 原码10010= 反码11101 (10010,1为符号码,故为负) (1110

负数的二进制表示

在二进制中,用最高位来表示整数和负数. 比如 System.out.println(Integer.toBinaryString(1)); System.out.println(Integer.toBinaryString(-1)); 会输出 整数前面的0被省略了. 或者这样 public void test(){ System.out.println(Integer.toBinaryString(Integer.MAX_VALUE)); System.out.println(Integer.t

负数的二进制表示方法

转自:http://blog.sina.com.cn/s/blog_56d8ea900100y65b.html 一:表示法:1.正数5的表示法假设有一个 int 类型的数,值为5,那么,我们知道它在计算机中表示为:00000000 00000000 00000000 000001015转换成二制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0. 2.负数-5的表示法现在想知道,-5在计算机中如何表示?在计算机中,负数以原码的补码形式表达. 二.概念:1.原码:一个正数,按照绝

负数的二进制表示法

先了解几个概念 [1]原码: ·正数的原码,按照绝对值转换成二进制 ·负数的原码,按照绝对值转换成二进制,最高位补1(有符号的整形最高位用来表示正\负,0为正数,1为负) 示例: 整数5的原码 00000000 00000000 00000000 00000101 整数-5的原码 10000000 00000000 00000000 00000101 [2]反码: ·正数的反码,与原码相同 ·负数的反码,符号位不变,其余为取反 示例: 整数5的原码与反码表示 原码:00000000 000000

负数的二进制如何转化为十进制

转发 -5 如何用二进制表示 取反加1 5 =0000 0101 取反 1111 1010 加1 1111 1011 所以这个就表示 -5 1111 1011  对应十进制中的多少        [减一取反] 首位是 1 ,故是负数 减一      1111 1010 取反           0000 0101=5 所以答案是    -5 原文地址:https://www.cnblogs.com/gongchengniu/p/12168991.html

Java语法基础---进制---负数二进制

八进制:用0开头表示. 十六进制:用0x开头表示. 负数的二进制表现形式    对应的正数二进制,取反加1,负数二进制最高位为1,正数二进制最高位为0

数据类型的转化(注意细节)+负数二进制算法

数据类型的转换要注意的细节: 凡是byte.short.char数据类型数据在运算的时候都会自动转换成int类型的数据再运算 多个数据类型的数据在运算的时候取决于大的数据类型 例子: byte a1 = 1; byte a2 = 2; byte a3 = (byte)(a1+a2); System.out.println(a3); //输出3 System.out.println('a' + 1 ); //输出98 一个整数没有加上任何标识的时候,默认是int类型的数据. 负数二进制算法 负数在