ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

二进制串的逆转

2019-07-19 14:57:59  阅读:234  来源: 互联网

标签:0000 1100 0011 二进制 0101 str 逆转


二进制串的逆转

 

Problem Description

将一个32位整数的二进制表示串的值逆转。如1的二进制表示为:
0000 0000 0000 0001,逆转之后为1000 0000 0000 0000

Input

每行一个32位的整数

Output

每行为位逆转后的整数

Sample Input

1
100

Sample Output

-2147483648
637534208

分析:

题目的描述还是很清楚的,就是把一个数的32位的二进制字符串倒过来。例如一个数的二进制字符串是1001 1010 1011 1100  1101 1100 0011 1010 带过来就是 0101 1100 0011 1011 0011 1101 0101 1001,我使用的办法就将四个二进制位倒过来,然后送到相应的地方,比如说,最后的1010,我就先把他变成 0101, 然后送到最高位。倒数第二个的0011,我就变成1100,然后送到第二个位置。那么我就是要8个数,去保存这8个 4位 二进制的数既可以了。然后最后判断是不是负数还是正数,分别输出。其中需要注意的是,保存的八个  4位 二进制的数,也是分别保存在相应的位置上面。例如  0101 1100 0011 1011 0011 1101 0101 1001。

str[7] = 0000 0000 0000 0000 0000 0000 0000 1001

str[6] = 0000 0000 0000 0000 0000 0000 0101 0000

str[5] = 0000 0000 0000 0000 0000 1101 0000 0000

str[4] = 0000 0000 0000 0000 0011 0000 0000 0000

str[3] = 0000 0000 0000 1011 0000 0000 0000 0000

str[2] = 0000 0000 0011 0000 0000 0000 0000 0000

str[1] = 0000 1100 0000 0000 0000 0000 0000 0000

str[0] = 0101 0000 0000 0000 0000 0000 0000 0000

如果最后结果是正数,就把上面的全部加起来,如果是负数则是str[7] - str[6]-str[5]-...-str[0],负数的补码性质。

 1 #include<stdio.h>
 2 
 3 void fun (int *p) { 
 4     int a, b, c, d, i;
 5       a = *p & 1;
 6       a = a << 3;
 7       b = *p & 2;
 8       b = b << 1;
 9       c = *p & 4;
10       c = c >> 1;
11       d = *p & 8;
12       d = d >> 3;
13       *p = a + b + c + d;
14 }
15 
16 int main () { 
17 
18     int n, a, b, i, c;
19     int str[8];
20     while (scanf("%d",&n) != EOF) { 
21         a = 15; b = 0; c = 28;
22         for (i = 0; i < 8; i++) { 
23         str[i] = n & a;
24          str[i] = str[i] >> b;
25          fun (&str[i]);   
26          str[i] = str[i] << c;
27          b = b + 4;
28          c = c - 4;
29          a = a << 4;
30     }
31     if (n % 2 == 0) { 
32        for (i = 0; i < 7; i++)
33        str[7] = str[7] + str[i];
34        printf("%d\n", str[7]);
35     } else {
36        for(i = 0; i < 7; i++)
37            str[7] = str[7] - str[i];
38         printf("%d\n",str[7]);
39     }
40     
41 }
42     return 0;
43 }
View Code

 

标签:0000,1100,0011,二进制,0101,str,逆转
来源: https://www.cnblogs.com/gznb/p/11213179.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有