求一个数的二进制逆序之后所对应的数

例:1

00000000 00000000 00000000 00000001

逆序之后是:

10000000 00000000 00000000 00000000

#include<stdio.h>
#include<stdlib.h>
int main()
{
                 int n = 0;
                 int num =0;
                 int i = 0;
                scanf( "%d", &n);
                 for (i = 0; i < 32; i++)
                {
                                num = num << 1;
                                num |= ((n>>i)&1);
                }
                printf( "n=%d  num=%d\n", n,num);
                system( "pause");
                 return 0;
}
时间: 2024-08-08 22:25:12

求一个数的二进制逆序之后所对应的数的相关文章

C语言整数按照二进制逆序,输出逆序后的整数值

问题来源,今天早上和一舍友吃早餐的时候谈到的一个问题,将一个整数按照二进制逆序,然后输出逆序后的数值. 我们知道数值在内存中都是以二进制的形式存放的,假如我们是32位机,每8位为一个字节,int型在32位机上是占4个字节,即32位. 如   2  = 0000 0000 0000 0000 0000 0000 00000 0010(32位) 逆 ^2  = 0100 0000 0000 0000 0000 0000 00000 0000  (这里用^表示逆转) 那么这个操作要如何执行呢?首先补充

C语言将整数以二进制逆序

问题来源,今天早上和一舍友吃早餐的时候谈到的一个问题,将一个整数按照二进制逆序,然后输出逆序后的数值. 我们知道数值在内存中都是以二进制的形式存放的,假如我们是32位机,每8位为一个字节,int型在32位机上是占4个字节,即32位. 如   2  = 0000 0000 0000 0000 0000 0000 00000 0010(32位) 逆 ^2  = 0100 0000 0000 0000 0000 0000 00000 0000  (这里用^表示逆转) 那么这个操作要如何执行呢?首先补充

二进制逆序

要求计算二进制(16位)的逆序,如数12345用二进制表示为: 00110000 00111001 将它逆序,我们得到了一个新的二进制数: 10011100 00001100 最容易想到的方法就是依次交换两端的数据,从右向左遍历数字,当i位遇到1时,将逆序数字对应的(17-i)位设为1. def reverseBinary(num): print bin(num) new=0 tmp=(1<<15) for i in xrange(16): if num&1: new|=tmp tmp

如何求一个数的二进制的值

在学校的时候,教科书上教过如何求得一个数的二进制如何表示,但是求解过程有啰嗦又麻烦. 我用我自己的方法,这个方法比较笨,但是够简单. 十进制整数如何转化为二进制数 算法很简单. 举个例子,11表示成二进制数: 11/2=5   余   1 5/2=2   余   1 2/2=1   余   0 1/2=0   余   1 得0结束 11的二进制表示为(从下往上):1011 这里提一点:只要遇到除以后的结果为0了就结束了,大家想一想,所有的整数除以2是不是一定能够最终得到0.换句话说,所有的整数转

(hdu 简单题 128道)Lowest Bit(求一个数的二进制的最后一个非零位对应的十进制数)

题目: Lowest Bit Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 8722    Accepted Submission(s): 6428 Problem Description Given an positive integer A (1 <= A <= 100), output the lowest bit of A.

C求一个数的二进制1的个数(精版)

#include <iostream> using namespace std; int Grail(int x) { int N=0; for(;x!=0;x>>=4)//一次左移4位. { N+="\0\1\1\2\1\2\2\3\1\2\2\3\2\3\3\4"[x&0xf]; } return N; } int main() { cout<<Grail(15)<<endl; }

只使用递归实现栈的逆序操作

2017-06-23 20:36:02 刚开始思考这个问题的时候陷入了一个误区,就是以为只能用一个递归完成. 然而事实上,可以使用两个递归来完成这个功能. 具体思考是这样的,首先递归其实是将问题规模缩小了,每次处理更小的问题.针对这题来说,更小的问题应该是去除底部那个数后的逆序再加上最后的数. 当然,你可能会问,什么不是去掉最上面的数,然后将它再放到最前面,理由很简单,栈是一种后进先出的数据结构,这种类型的数据结构适合的是在尾部添加数据,而非在首部添加数据,所以更清晰的或者说更适合栈的操作是先把

二进制打印与逆序_C语言(转)

//二进制逆序 by MoreWindows( http://blog.csdn.net/MoreWindows ) #include <stdio.h> //二进制打印函数 template <class T> void PrintfBinary(T a) { int i; for (i = sizeof(a) * 8 - 1; i >= 0; --i) { if ((a >> i) & 1) putchar('1'); else putchar('0'

待字闺中之逆序分析

题目来源,待字闺中,原创@陈利人 ,欢迎大家继续关注微信公众账号"待字闺中" 一个整数,可以表示为二进制的形式,请给出尽可能多的方法对二进制进行逆序操作. 例如:10000110 11011000的逆序为 00011011 01100001 分析:题目中说是一个整数,对它的二进制进行逆序.并不是一个01字符串,或者01的数组.那么我们该如何解决这个问题呢?方法还是比较多的,有的中规中矩.有的非常巧妙.我们要掌握中规中规的方法,见识更多的巧妙的方法.慢慢的,能够举一反三,在遇到新的问题时