C++對於bit的操作 bit直接賦值 及其他技巧(未完)


最近做一個壓縮程序,需要直接操作bit這一單位,但是C和C++這兩個號稱面向底層的語言竟然沒有提供對於bit的直接支持,最小單位是bit。。

後來發現了一個間接操作bit的方法,就是湊成一個int來讀或者寫,配合上<<和>>和&等來進行操作,這些後面再更

首先是直接利用二進制數給int賦值。

對於16進制賦值就不提了,人所共知的事情。但是畢竟16進制等等還是經歷了一層轉換,某些時候(比如現在這個時候=-=)實在是麻煩,還得多寫一個轉換函數,鬧心啊。。明明賦值存儲進去就是二進制,我們賦值時候卻要從二進制轉成16進制,賦值後又成了二進制然後進入了計算機中,這不是浪費青春浪費計算機資源麼。

當然非要進制轉換,其實也不必自己去寫個轉換函數,可以查一下strtoul()的說明,對string進行任意進制轉換

http://blog.csdn.net/czxyhll/article/details/7876084


C語言裏頭支持直接的二進制賦值,平常都是熟悉的0xA12E等等,類比換成0b0101010就可以了,最簡潔明瞭

 
int a;

a=0b0100101; 

但是C++上頭寫0b010101就直接提示出錯,只得另尋他法。。於是:

利用匯編直接對a進行二進制賦值,簡單粗暴有效


int a;

_asm MOV Dword Ptr a, 01111111b

當然賦值不要造成溢出,int在32位VS2010是4Byte,自己注意吧



對於程序裏頭動態構造二進制數

可以考慮利用+1和移位符號來逐個構建。。實際時候可以利用一個數組和循環來構建

比如10001010B這個二進制數

 a=1;//1B 
 a<<3;//1000B
 a+=1;//1001B
 a<<2;//1000100B
 a+=1;//1000101B 
 a<<1;//10001010B 




相關討論:

http://stackoverflow.com/questions/3834336/why-does-c-support-hex-assignment-but-lack-binary-assignment-how-best-to-sto

bytes.com/topic/c/answers/643503-binary-values-assignment


待續

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章