C++二進(jìn)制翻轉(zhuǎn)實(shí)例分析
本文實(shí)例講述了C++二進(jìn)制翻轉(zhuǎn)的方法,將常用的幾種解決方法羅列出來(lái)供大家比較選擇。具體如下:
首先來(lái)看看一個(gè)相對(duì)笨拙的算法:
#include <iostream> using namespace std; void printBinary(unsigned char str, int size = 1) { int flag = 0x01; for (int i = 0; i < size; i++) { for (int i = 0; i < 8; i++) { if (str & (0x01 << (7 - i))) cout << "1"; else cout << "0"; } cout << endl;; } } unsigned char mySwap(unsigned char data) { unsigned char flag = 0x01; for (int i = 0, j = 7; i < j; i++, j--) { int right = data & (0x01 << i); int left = data & (0x01 << j); data &= ~(0x01 << j); data &= ~(0x01 << i); int dist = j - i; data |= (right << dist); data |= (left >> dist); } return data; } void main(void) { char source=0x07; int i; printBinary(source, 1); unsigned char result = mySwap(source); printBinary(result); }
下面這個(gè)翻轉(zhuǎn)程序相對(duì)上面實(shí)例而言簡(jiǎn)潔高效:
unsigned char swapBinary(unsigned char data) { int sign = 1; unsigned char result = 0; for (int i = 0; i <= 7; i++) { result += ((data & (sign << i)) >> i) << (7 - i); } return result; }
下面這個(gè)反轉(zhuǎn)程序比較容易理解:
unsigned char swapBinary2(unsigned char data) { data=(( data & 0xf0) >> 4) | ((data & 0x0f) << 4); data=((data & 0xCC) >> 2) | ((data & 0x33) << 2); data=((data & 0xAA) >> 1) | ((data & 0x55) << 1); return data; }
最后這個(gè)超牛的反轉(zhuǎn)程序簡(jiǎn)直碉堡了。。。
unsigned char codeTable[16]={0x00, 0x08, 0x04, 0x0c, 0x02, 0x0a, 0x06, 0x0e, 0x01, 0x09, 0x05, 0x0d, 0x03, 0x0b, 0x07, 0x0f}; unsigned char swapBinary3(unsigned char data) { return ((codeTable[data >> 4]) | (codeTable[data & 0x0f] << 4)); }
希望本文所述對(duì)大家C++程序算法設(shè)計(jì)的學(xué)習(xí)有所幫助。
- C++ 十進(jìn)制轉(zhuǎn)換為二進(jìn)制的實(shí)例代碼
- C++實(shí)現(xiàn)string存取二進(jìn)制數(shù)據(jù)的方法
- C++實(shí)現(xiàn)讀入二進(jìn)制數(shù)并轉(zhuǎn)換為十進(jìn)制輸出
- c++ 一個(gè)二進(jìn)制串轉(zhuǎn)化為整數(shù)的解決方法
- 詳解C++編程中對(duì)二進(jìn)制文件的讀寫操作
- C++中幾種將整數(shù)轉(zhuǎn)換成二進(jìn)制輸出的方法總結(jié)
- C++求1到n中1出現(xiàn)的次數(shù)以及數(shù)的二進(jìn)制表示中1的個(gè)數(shù)
- 詳解C++中二進(jìn)制求補(bǔ)運(yùn)算符與下標(biāo)運(yùn)算符的用法
- C++訪問(wèn)Redis的mset 二進(jìn)制數(shù)據(jù)接口封裝方案
- 利用C/C++二進(jìn)制讀寫png文件的方法示例
相關(guān)文章
C++11 lambda表達(dá)式在回調(diào)函數(shù)中的使用方式
這篇文章主要介紹了C++11 lambda表達(dá)式在回調(diào)函數(shù)中的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11C++面試題之結(jié)構(gòu)體內(nèi)存對(duì)齊計(jì)算問(wèn)題總結(jié)大全
這篇文章主要給大家總結(jié)了關(guān)于C++面試題中結(jié)構(gòu)體內(nèi)存對(duì)齊計(jì)算問(wèn)題的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),通過(guò)這些介紹的內(nèi)容對(duì)大家在面試C++工作的時(shí)候,會(huì)有一定的參考幫助,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-08-08C++中g(shù)etline()、gets()等函數(shù)的用法詳解
這篇文章主要介紹了C++中g(shù)etline()、gets()等函數(shù)的用法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02C語(yǔ)言動(dòng)態(tài)內(nèi)存管理的實(shí)現(xiàn)
本文主要介紹了C語(yǔ)言動(dòng)態(tài)內(nèi)存管理的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08基于Qt+OpenCV實(shí)現(xiàn)照片換底色處理
在圖像處理領(lǐng)域,OpenCV是一款強(qiáng)大而廣泛應(yīng)用的開源庫(kù),能夠提供豐富的圖像處理和計(jì)算機(jī)視覺(jué)功能,本文將介紹如何利用Qt 編輯器調(diào)用OpenCV庫(kù)對(duì)照片進(jìn)行換底色處理,實(shí)現(xiàn)更加獨(dú)特和吸引人的效果2023-11-11c語(yǔ)言實(shí)現(xiàn)向上取整計(jì)算方法
這篇文章主要介紹了c語(yǔ)言實(shí)現(xiàn)向上取整計(jì)算方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07