1. 程式人生 > >求一個數的二進位制從左到右翻轉後的值

求一個數的二進位制從左到右翻轉後的值

在32位機器上25這個值包含下列各位:
00000000000000000000000000011001
翻轉後:(2550136832)
10011000000000000000000000000000

  首先要求一個數的二進位制,然後把它存入陣列中,n&1就是這個數最低位的二進位制,然後把n右移一位可以求出倒數第二位的二進位制,不斷進行迴圈,直到求出n的最高位的二進位制。次時陣列中存的就是這個數由低位到高位的二進位制,只需把這個數轉換為10進位制即可。轉換10進位制,最低位乘以2的0次方,最高位乘以2的31次方就可求出10進位制數。程式碼如下

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
unsigned
int reverse_bit(unsigned int value) { int bin[32] = { 0 }; int i = 0; unsigned int tmp = 0; unsigned int sum = 0; for (i = 0; i < 32; i++) { bin[i] = value & 1; value >>= 1; } for (i = 0; i <32; i++) { tmp = (unsigned int)pow(2, i) * bin[31
-i]; sum += tmp; } return sum; } int main() { unsigned int n = 25; printf("%u", reverse_bit(n)); system("pause"); return 0; }

相關推薦

個數二進位制位中有多少個 1 的不同解法

*返回一個數的二進位制表達中1的個數。*#include<stdio.h>int main(){    unsigned int i;    scanf("%d",&i);    p

程式設計:個數組元素的最大

方法1:自己 #include<stdio.h> void main(void){ int s[10] = {10, 23, 45, 1, 34, 76,100, 32, 456,54}; int i,j; int max; //求陣列s元素的最大

java實現遞迴函式入門級例子:用遞迴函式個數組中的最大

我們開始把陣列分為兩半,分別找出最大值,那麼這個最大值就是最後的最大值:同時我們左右兩邊繼續細分,停止條件就是細分到單個數值為止。 package chapter1; //使用遞迴求出一個數組中的最小值 public class FindMax { public sta

【C語言】個數二進位制位模式左到右翻轉對應的十進位制

用函式unsigned int reverse_bit(unsigned int value)實現想要的功能 value是我們想要求的值。 #include <stdio.h> #include <math.h> unsigned

個數二進位制左到右翻轉

在32位機器上25這個值包含下列各位: 00000000000000000000000000011001 翻轉後:(2550136832) 1001100000000000000000000000

用c語言實現 個數二進位制左到右的翻轉

編寫函式 unsigned int  reverse_bit(unsigned int value); 這個函式的返回值 value的二進位制位模式從左到右翻轉後的值。 如在32位機器上25這個值包含下列各位: 000000000000000000000000000110

個數對應二進位制中0或1的個數

求一個數對應的二進位制中,0或1的個數 思路: 求1作與運算;求0作或運算 //求1的個數 void print_bin_one(int num){ int count=0; whi

個數二進位制表示中1的個數和0的個數

在我複習的過程中,很多面試題,甚至筆試題中,都用到了多次求一個整數的二進位制表達中1的個數或者0的個數,網上的資料比較亂,我在此做個小記錄,算是自己的一點總結,也希望對大家有幫助! 1.1 求二進位制數中 1 的個數(java版——演算法轉換) public int getNumOf

【C語言】個數二進位制中 1 的個數

求一個數的二進位制的1的個數 1,通過模除的方法 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> int main() { int i = 0;

【面試題】劍指offer10--個數二進位制數中的1的個數

求一個數二進位制數中的個數 第一種方法:模除法 程式碼如下: //Q:請實現一個函式,輸入一個整數,輸出該數二進位制中的 //1的個數。例如:把9表示成二進位制是1001,有2位是1.因此,如果輸入

算法 - 個數組的最長遞減子序列(C++)

str log bst article subst else from return ear //************************************************************************************

基礎1--個數的最大質因數

pre spa pac com urn space align images 分享 基礎1--求一個數的最大質因數 一、心得 二、代碼及結果 1 #include <iostream> 2 using namespace std; 3 int fin

個數的二進制數中所含1的個數的代碼實現

article snippet 出現 pri data- count tdi main 代碼實現 #include<stdio.h> int numberOf1_solution1(int n)/*將一個正數以此向右移一位,與1做與運算。直到這個數為零

【單調棧】個數組第一個比他小的數的位置

type 技術分享 bit esp alt log lap while play 【AC】 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 int

個數的因子個數

質因數分解 ++ 圖片 src image com pos 質因數 scanf 先將n質因數分解後,如n=x1^a*x2^b*x3^c 個數為 (a+1)*(b+1)*(c+1) poj 2992 #include<stdio.h>#include<st

個數的所有因子數

== sqrt color pre col num blog 因子 print def getNum(num): dict={}   #因子數都是以sqrt(num)為界對稱的,找出<=sqrt(num)這邊的,用num/i就同時獲得了另一半的因子數,從1開

劍指offer-10.個數中二進制格式中1的個數

clas 分析 又是 題目 補碼 off number 替換 一個數 0 題目 輸入一個整數,輸出該數二進制表示中1的個數。其中負數用補碼表示。 1 分析 一個數除2,余數為1,那麽表示二進制中含有一個1。 因此可以使用循環,依次判斷。 但是除法效率底,這裏又是除2,因此可

O(n)個數組中連續區間和的最大

return 區間 scan CI spa 最大 %d 區間和 數組 int n, a[5000]; int main(){ scanf("%d", &n); for (int i = 1; i <= n; i++)cin >>

用位運算實現四則運算之加減乘除(用位運算個數的1/3) via Hackbuteer1

esp sub 沒有 正整數 過程 介紹 異或 sin 完成 轉自:http://blog.csdn.net/hackbuteer1/article/details/7390093 ^: 按位異或;&:按位與; | :按位或 計算機系統中,數值一律用補碼來表示:因為

個數組中最大與最小

div return urn 技術 code include 一個 最小值 array #include <stdio.h> int main() { int array[10]={100,1,40,29,45,22,98,2,83,75};