1. 程式人生 > >c語言按位反轉、二進位制輸出函式

c語言按位反轉、二進位制輸出函式

#include<stdio.h>

//bit_reverse:32位數按位反轉函式
// 
作用:把一個32位整數按位反轉,即第1位轉到第32位,第2位轉到第31位,依次下去。
//演算法實現:第一行程式碼為奇偶位相互交換;第二行為以兩位為一單元,奇偶單元進行交換;第三行為以四位為一單元,奇偶單元進行交換;第四行為以八位為一單元,奇偶單元進行交換;最後一行為以十六位為一單元,奇偶單元進行交換。至此,32位反轉完成,演算法結束。

unsigned int bit_reverse(unsigned int n)
{
n = ((n >> 1) & 0x55555555) | ((n << 1) & 0xaaaaaaaa);
n = ((n >> 2) & 0x33333333) | ((n << 2) & 0xcccccccc);
n = ((n >> 4) & 0x0f0f0f0f) | ((n << 4) & 0xf0f0f0f0);
n = ((n >> 8) & 0x00ff00ff) | ((n << 8) & 0xff00ff00);
n = ((n >> 16) & 0x0000ffff) | ((n << 16) & 0xffff0000);

return n;
}

//bit_num:求出32位數中從高位到低位的第一個bit=1的bit位
// 實現:按位右移判斷
unsigned int bit_num(unsigned int n)
{
int i;
int len = sizeof(n) << 3;
for(i = len-1; i >= 0; i--)
{
if(n>>i)
return i;
}

return 0;
}

//printf_binary:以二進位制形式輸出整數
// 實現:逐位右移判斷
void printf_binary(unsigned int n)
{
int i;
for(i = 31; i >= 0; i--)
{
printf("%d", ((n & ((1<<(i+1))-1)) >> i) ? 1:0);
if(i%8 == 0)
printf(" ");
}
}

int main()
{
int i;
int num = 0xFFAA;
int res;
printf("0x%08X:", num);
printf_binary(num);
printf("\n");
res = bit_reverse(num);
printf("0x%08X:", res);
printf_binary(res);
printf("\n");

for(i = 0; i < 32; i++)
{
num = 1 << i;
printf("bit_num(0x%08X)=%2d\n", num, bit_num(num));
}

while(1)
{
printf("\ninput num:");
scanf("%d", &num);
printf_binary(num);
}

return 0;
}

相關推薦

c語言反轉二進位制輸出函式

#include<stdio.h> //bit_reverse:32位數按位反轉函式 //  作用:把一個32位整數按位反轉,即第1位轉到第32位,第2位轉到第31位,依次下去。 //演算法實現:第一行程式碼為奇偶位相互交換;第二行為以兩位為一單元,奇偶單元進

c語言異或^的應用例項

1.若a ^ b = c; 則有a ^ c = b, b ^ c = a; 例:將兩個整形變數交換(不建立臨時變數) 這裡就可以用到上面得到的規律來寫,在寫程式碼之前先給上面的規律附上具體值來驗證一下:            1

C語言異或 取反

https://blog.csdn.net/ZhaoFaxing/article/details/78905066   與運算:& 兩者都為1為1,否則為0 1&1=1,  1&0=0,  0&1=0,  0&

C語言取反快速計算

內部使用 證明 需要 內部 計算機 所有 假設 它的 code 先說結論 假設x為signed int,也就是說它的補碼表示中第一位表示符號(1:負;0:正),那麽~x=-(x+1) 證明 計算機內部使用補碼表示,則問題相當於求證:當x為signed int時,(~x)補=

C語言異或

位運算子有:&(按位與)、|(按位或)、^(按位異或)、~ (按位取反)。 優先順序從高到低,依次為~、&、^、| 按位與運算有兩種典型用法,一是取一個位串資訊的某幾位,如以下程式碼擷取x的最低7位

常見操作及運算應用舉例:1,C語言運算子異或“∧”的作用2,異或運算的作用3,&(與運算)|(或運算)^(異或運算)

  1 C語言中位運算子異或“∧”的作用: 異或運算子∧也稱XOR運算子。它的規則是若參加運算的兩個二進位同號,則結果為0(假);異號則為1(真)。即0∧0=0,0∧1=1,1∧1=0。如: 即071∧052,結果為023(八進位制數)。 “異或”的意思是判斷兩個相應的位值是否為“

C語言(三 字串結構體共用體輸入輸出

字串 字串是儲存了一些字元,最後以null(’/0’)結尾的一維字元陣列。 char str[6] = {'h','e','l','l','o','/0'}; char str[ ] = "hello" ; 還有一些字串操作函式: 1、strcpy(s1,s2) 複製s2到s1 2

Linux-C基礎知識學習:C語言作業-輸入mn,並把m~n之間的不能被3整除的數輸出

Linux基礎知識學習 C語言作業:輸入m、n,並把m~n之間的不能被3整除的數輸出 //輸入m、n,並把m~n之間的不能被3整除的數輸出 #include <stdio.h> ma

C語言】輸入一個整數,輸出該數二進位制表示中1的個數(三種方法)

輸入一個整數,輸出該數二進位制表示中1的個數。如輸入32,輸出1.程式碼實現:方法1:與運算#define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; int FindOne

C++ 異或等運算方法

按位與運算子(&) 參加運算的兩個資料,按二進位制位進行“與”運算。 運算規則:0&0=0;   0&1=0;    1&0=0;     1&1=1;        即:兩位同時為“1”,結果才為“1”,否則為0 例如:3&a

C語言 十進位制數轉化為二進位制 八進制 十六進制數

    對於剛開始學習C語言的來說,我們知道%d可以表示十進位制的數,%o可以表示八進位制的數,%x用來表示十六進位制的數,但卻沒有來表示二進位制數的。    這就是相對應的八進位制數和十六進位制數#include <stdio.h> int main() {

c語言】有3個數a,b,c,要求大小順序把它們輸出

// 有3個數a,b,c,要求按大小順序把它們輸出 #include <stdio.h> int main() { int a[3] ; int i,j; int temp; printf("請輸入a,b,c三個數: "); for( i = 0;

C語言檔案流操作的二進位制讀寫和定位(fwritefreadfseek)

二進位制寫檔案中用到fwrite函式,這個函式對檔案進行寫操作的時候寫進去的資料就是二進位制的資料包括後面的fread函式,進行讀操作的時候也是直接讀二進位制,這也是在對檔案操作時,這兩個函式與fpr

C語言中字符字符串字符數組

文件 getc order 知識點 技術 ima 數組 c語言 align char a = ‘h‘; memory h char a[] = "Hello"; memory H e l l o ‘\0‘ stri

C#語言與變量數據類型

使用 賦值 轉換成 運算 命名規範 ole 字符 書寫格式 double類型 1.代碼的運用 計算機語言:C、PHP、Ruby、Java、C#、Basic、JS、C++ 源代碼:就是用某種計算機語言編寫的內容 編譯:用編譯器將源代碼轉換成機器代碼 機器語言:機器語言就是能夠

C語言(三)---輸入和輸出

而是 abs 空間 精度 保存 括號 ger 原型 parameter 一、輸出   輸入輸出:英文是Input/Output簡稱IO。   C語言標準函數庫中,提供了關於以下介紹的幾種輸出函數,(所有標準輸入輸出函數在調用前,必須先包含頭文件stdio.h) 1.1 簡單

異或等運算方法

三種 補碼 1=1 emp sign 進制 不同 用途 即將 1、按位與運算符(&) 參加運算的兩個數據,按二進制位進行“與”運算。運算規則:0&0=0; 0&1=0; 1&0=0; 1&1

(轉)C語言之原碼反碼和補碼

計算機 進制 情況下 class 正數 去掉 都是 OS 原碼 原碼、反碼和補碼 1).數據在內存中存儲的時候都是以二進制的形式存儲的. int num = 10; 原碼、反碼、補碼都是二進制.只不過是二進制的不同的表現形式. 數據是以補碼

Problem X: C語言習題 學生成績輸入和輸出

hang output pan log board AR tput 成績 sub Problem X: C語言習題 學生成績輸入和輸出 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 4722 Solved: 2284[Su

運算符左移右移原碼反碼補碼

位運算符 位數 是我 計算機 基礎上 個數字 部分 普通 bsp 位運算符的基本規則1,位運算符都是針對整數的二進制數字形式而進行的。2,按位與運算基本規則(規則表):1 & 1 ==> 11 & 0 ==> 00 & 1 ==>