1. 程式人生 > >位操作(C和指標)

位操作(C和指標)

/*
**編寫一個函式unsigned int reverse_bits(unsigned int value);這個函式的返回值是把value的二進位制位模式從左到右變換一下後的值。
**例如在32位機器上,25這個值包含下列各位00000000000000000000000000011001   函式的返回值應該是10011000 0000 0000 0000 0000 0000 0000
*編寫函式時要注意不要讓它依賴於你的機器上整形值得長度00000000000000000000000000000001

*/

#include <iostream>
using namespace std;
unsigned int reverse_bits(unsigned int value)
{
unsigned int answer;
unsigned int i;


answer =0;
/*
**只要i不是0就繼續執行,這就使迴圈與機器的字長無關,從而避免了可移植性問題
*/


for (i =1;i != 0;i<<=1)
{
//把舊的answer左移一位,為下一個位留下空間。如果value的最後一位是1,answer就與1進行or操作,然後將value右移至下一個位
answer <<=1;
if (value & 1)
{
answer |= 1;
}
value >>=1;
}
return answer;
}
int main()
{
unsigned int ans;
unsigned int ans2;
//ans=reverse_bits(24);
ans2=reverse_bits(25);
cout<<ans<<endl;
cout<<ans2<<endl;
}

雖然看起來有點簡單但是邏輯性相當強,自己對於位操作處理的非常少!

相關推薦

操作C指標

/* **編寫一個函式unsigned int reverse_bits(unsigned int value);這個函式的返回值是把value的二進位制位模式從左到右變換一下後的值。 **例如在32位機器上,25這個值包含下列各位000000000000000000000

十進位制轉二進位制、八進制、十六進C語言指標實現

以下程式碼可以實現十進位制到二進位制、八進位制、十六進位制的任意轉換。 #include<stdio.h> #include<string.h> void fun10_2_8_16(char *p,int number,int cet) { if(number

紅黑樹的構建以及插入刪除操作C語言完整

參照演算法導論虛擬碼。 註釋沒有很詳細,建議先看演算法導論或者其他博主的分析搞清楚insert和delete操作的方法。 #include<stdio.h> #include<stdlib.h> typedef int type; typ

隊列的實現及操作C語言描述

img tdi 定義數據 上一個 判斷 free 隊列的單鏈表 插入數據 尾指針 // 隊列的單鏈表實現 // 頭節點:哨兵作用,不存放數據,用來初始化隊列時使隊頭隊尾指向的地方 // 首節點:頭節點後第一個節點,存放數據 #include&

資料結構——順序表操作C語言實現

//順序表list #include"stdio.h" #define maxsize 15 typedef struct{ int a[maxsize]; int size; }list; //建立 void create(lis

資料結構——入棧,出棧,佇列相關操作C語言實現

閱讀過程之中可能會花費比較多的時間:建議直接翻到最後,有完整的程式碼可以使用 程式準備工作 #include <stdio.h> #include <malloc.h> #include <stdlib.h> #include<proc

ios 簡單的plist檔案讀寫操作DocumentNSUserDefaults

//    [self getDocoumentsPath];//蘋果建議將程式建立產生的檔案以及應用瀏覽產生的檔案資料儲存在該目錄下,iTunes備份和恢復的時候會包括此目錄 //    [self getLibraryPath];//儲存程式的系統預設狀態設定 //

棧的基本操作C語言版

概念 一種特殊的線性表,只能在固定的一端進行插入和刪除操作,這個固定的一端稱為棧頂,另外一端稱為棧底,沒有任何元素的棧稱為空棧!! 棧的特性 先進後出或者說後進先出!! 另外,棧分為順序棧以及鏈式棧。 棧的功能 將資料從一種序列改變為另外

堆疊的簡單實現之一:基本操作C語言實現

堆疊(Stack)是一種操作受限的線性表,堆疊的插入和刪除操作只能在一端進行。堆疊遵循著先進後出或者叫後進先出的原則。在堆疊中,允許插入和刪除的一端叫著棧頂(Top),另外一端叫著棧底(Bottom)

樹莓派3 opencv呼叫攝像頭C++Python

安裝環境 : ubuntu 16.04 樹莓派利用基於C++的opencv的CaptureVideo函式呼叫外部攝像頭,比如usb攝像頭等是沒有問題的,但是無法呼叫自帶的攝像頭,因此需喲通過呼叫其他的函式或者改變自帶CSI攝像頭的屬性設定才可以獲取實時

pandas一些基本操作DataFramSeries_4

協方差 first tac imp value 等級分 panda 二次排序 wap import numpy as np;import pandas as pd;kill_num=pd.Series([10,12,8,5,0,2,6])#擊殺數量#青銅1200-2000#

pandas一些基本操作DataFramSeries_2

randint isinf 向上 四舍五入 and [1] taf init base import numpy as nparr1 = np.arange(32).reshape(8,4)print(arr1)arr1 = arr1.reshape(-1);print(a

pandas一些基本操作DataFramSeries_3

重復值 包含 asc import afr and 對齊 是否 isn import pandas as pd;import numpy as np#通過一維數組創建Chinese = np.array([89,87,86])print(Chinese)print(pd.S

vector容器的基本操作輸入輸出

#include<iostream> #include<string> #include<vector> using namespace std; int main() { string word; vector<string&

資料結構—連結串列的基本操作c語言程式碼

連結串列連結串列也是一種線性表,與順序表不同之處在於不像順序表佔據一段連續的儲存空間,而是將儲存單元分散在記憶體的任意地址上。連結串列結構中,儲存每個資料時候都會把記錄寫在連結串列的一個結點(node)中,每個結點之間由指標相連,形成如同鏈子的結構。結點(node):可以是一

學習筆記——單鏈表的基本操作C語言實現

線性表的儲存結構有順序儲存結構(順序表)和鏈式儲存結構(連結串列)兩種。順序表在之前的部落格有介紹過,不明白的朋友可檢視:靜態分配順序表的基本操作及動態分配順序表的基本操作。相對於順序表來說,連結串列稍微難一些,本人花了兩天的時間認真查看了一些資料,終於大致明白了一些東西。現

資料結構—順序表基本操作c語言程式碼

順序表計算機內部儲存一張線性表是用一組連續地址記憶體單元,這種儲存結構即為順序儲存結構,這種結構下的線性表叫順序表。順序表有兩種定義方法:                                    1.靜態定義                           

靜態連結串列基本操作C語言實現詳解

上節,我們初步建立了一個靜態連結串列,本節學習有關靜態連結串列的一些基本操作,包括對錶中資料元素的新增、刪除、查詢和更改。 本節是建立在已能成功建立靜態連結串列的基礎上,因此我們繼續使用上節中已建立好的靜態連結串列學習本節內容,建立好的靜態連結串列如圖 1 所示: 圖 1 建立好的靜態連結串列 靜態

表示式計算器逆波蘭法操作C語言實現

可能很多的同學在學資料結構的時候。說到棧,都會有一道很經典的題目,那就是用棧來實現計算器。我們都知道普通的計算寫起來是很簡單的,但是如果涉及到左右括號以及加減乘除組成的運算式的時候則寫起程式時便不那麼容易了。 比如:(1+(2*(1+3)/2)+10)

其他進制轉化為10進10進制轉化為其他進均一個函式c++

今天專門抽出來一點時間來弄一下,進位制轉化的問題,不論是其他進位制轉化為10進位制還是10進位制轉化為其他進位制,均使用同一個函式來完成,只需要手動輸入從哪個進位制轉化為哪個進位制。 程式碼如下: #include <iostream> #include <cmat