1. 程式人生 > >位元組按位逆序

位元組按位逆序

32位的number,把它按位逆序 : 1101001 ==> 1001011

最直接的想法就是迴圈32次

還有可以優化的地方

// 交換每兩位
v = ((v >> 1) & 0x55555555) | ((v & 0x55555555) << 1);
// 交換每四位中的前兩位和後兩位
v = ((v >> 2) & 0x33333333) | ((v & 0x33333333) << 2);
// 交換每八位中的前四位和後四位
v = ((v >> 4) & 0x0F0F0F0F) | ((v & 0x0F0F0F0F) << 4);
// 交換相鄰的兩個位元組
v = ((v >> 8) & 0x00FF00FF) | ((v & 0x00FF00FF) << 8);
// 交換前後兩個雙位元組
v = ( v >> 16             ) | ( v               << 16);

相關推薦

位元組

32位的number,把它按位逆序 : 1101001 ==> 1001011 最直接的想法就是迴圈32次 還有可以優化的地方 // 交換每兩位 v = ((v >> 1) & 0x55555555) | ((v & 0x555555

位元組 Reverse Bits

源自某公司的一道試題,問題很簡單: 輸入一個位元組(8 bits),將其按位反序。 也就是說如果輸入位元組的八個位元是“abcdefgh”,要得到“hgfedcba”。作為面試題或者筆試題,自然的,隱含了一個要求:效率儘可能高。 這個問題還有一個擴充套件版本,或許網上見

對一個字元bit(又稱反轉)

題目要求如題所示:將一個字元按bit位逆序,例如一個位元組是0x11,將其逆序後就變成0x88。下面是四種解法,其中最後一種效率最高,是從《Hacker's Delight》這本書中學來的。第一種:看似創新,其實最笨的做法。使用bit型別,程式碼不夠簡潔,執行效率較低,並且擴

輸入一個int型整數,將其輸出,每個數字後有一個空格。 將n輸出,每個數字後有一個空格,輸出佔一行。例如,輸入12354,輸出4 5 3 2 1

#include<stdio.h>#include<math.h> int main(){ int n,a; scanf("%d",&n); while(1) { if(n>=10)  {  a=n%10;  n=n/10;  print

給出不多於5的正整數,求出它是幾位數,分別輸出每一輸出每一數字。

給出不多於5位的正整數,要求: 1,求出它是幾位數 2,分別輸出每一位數 3,按逆序輸出每一位數字,例如原數為321,應輸出123. 第一種方法: (1)求一個數是幾位數,有一種方法是: if (x > 9999) { place = 5; printf("這是一個五位數\n");

給出一個不多於5的整數,要求 1、求出它是幾位數 2、分別輸出每一數字 3、輸出各位數字,例如原數為321,應輸出123。

撰寫人——軟工二班——陳喜平 題目描述 給出一個不多於5位的整數,要求 1、求出它是幾位數 2、分別輸出每一位數字 3、按逆序輸出各位數字,例如原數為321,應輸出123。 將下面的程式填寫完整。 #include <stdio.h> int main() { i

AMNO.6題目描述 給出一個不多於5的整數,要求 1、求出它是幾位數 2、分別輸出每一數字 3、輸出各位數字,例如原數為321,應輸出123 輸入 一個不大於5的數字 輸出 三

題目描述 給出一個不多於5位的整數,要求 1、求出它是幾位數 2、分別輸出每一位數字 3、按逆序輸出各位數字,例如原數為321,應輸出123 輸入 一個不大於5位的數字 輸出 三行 第一行 位數 第二行 用空格分開的每個數字,注意最後一個數字後沒有空格 第三行 按逆

轉: 求出它是幾位數 分別輸出每一數字 輸出各位數字

#include <stdio.h> int main(int argc, const char * argv[]) { /*給你一個不多於5位的正整數,要去: 求出它是幾位數; 分別輸出每一位數字; 按逆序輸出各位數字,例如原數為:321,應

習題 4.9 給一個不多於5的正整數,要求:1. 求出它是幾位數;2. 分別輸出每一數字;3. 輸出各位數字,例如原數為321,應輸出123。

C程式設計 (第四版) 譚浩強 習題4.9 個人設計 習題 4.9 給一個不多於5位的正整數,要求: 1. 求出它是幾位數; 2. 分別輸出每一位數字; 3. 按逆序輸出各位數字,例如原數為321,應輸出123。 程式碼塊:

給出一個不多於5的正整數,(1) 求出它是幾位數(2) 分別打印出每一數字(3) 打印出各位數字,例如原數為321,應輸出123

1、         給出一個不多於5位的正整數,要求: (1)    求出它是幾位數; (2)    分別打印出每一位數字; (3)    按逆序打印出各位數字,例如原數為321,應輸出123.  #include <stdio.h> int main()

給一個不多於5的正整數,要求: (1)求出它是幾位數 (2)分別輸出每一數字 (3)輸出各位數字,例如原數為321,應輸出123

4.9給一個不多於5位的正整數,要求: (1)求出它是幾位數 (2)分別輸出每一位數字 (3)按逆序輸出各位數字,例如原數為321,應輸出123 程式碼: #include “stdio.h” #include “math.h” int count(int n)

輸入一個不多於5的正整數。1、求出它是幾位數;2、分別輸出每一數字;3、輸出各位數字。

#include <stdio.h> #include <stdlib.h> int main() { int a[5],n,i=0; int num=0; printf("請輸入一個數:"); scanf("%d",&n);

給出一個不多於5的整數,要求 1、求出它是幾位數 2、分別輸出每一數字 3、輸出各位數字,例如原數為321,應輸出123

#include <stdio.h> int main() { int n,i,a;   int number;      scanf("%d",&n);     number=n;      if (n<10) {                     //用if語句判斷這個整數

【c語言】給一個不多於5的正整數,要求: 1、求出它是幾位數 2、分別輸出每一數字 3、輸出各位數字

// 給一個不多於5位的正整數,要求: // 1、求出它是幾位數 // 2、分別輸出每一位數字 // 3、按逆序輸出各位數字 #include <stdio.h> #include <math.h> int main() { int a,b,c

10.14 將n個數輸入輸出順序的排列,用函數實現

bdn r+ mvt b2c odr ack thp zip evb 將n個數按輸入輸出順序的逆序排列,用函數實現。 #include <stdio.h> int main(){ int n,i; void reverse(int * num

判斷一個正整數的位數、輸出、輸出

 #if 0 //判斷一個數字有幾位數#include <stdio.h>int GetFigure(int n){ int flg=0; do{  n /= 10;  flg++; }while

將n個數輸入時順序的排列,用函式實現(指標)

#include <stdio.h> void reverse(int a[],int n) { int *p;   for(p=a+n-1;p>=a;p--)        &nb

輸出一個n十進位制數字

#include<stdio.h> int Mysqrt(int n) { int i; for(i=0;ii<=n;i++)//33 { ; } return i-1; //return sqrt(n); } //統計十進位制n的位數 int GetFigures