1. 程式人生 > >C++對於bit的操作 bit直接賦值 及其他技巧(未完)

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


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

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

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

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

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

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 


相關討論:

待續

相關推薦

C++對於bit操作 bit直接 及其技巧

最近做一個壓縮程式,需要直接操作bit這一單位,但是C和C++這兩個號稱面向底層的語言竟然沒有提供對於bit的直接支援,最小單位是bit。。 後來發現了一個間接操作bit的方法,就是湊成一個int來讀或者寫,配合上<<和>>和&等來進行操作

C/C++常見面試知識點總結附面試真題----20180919更新

以下內容部分整理自網路,部分為自己面試的真題。 第一部分:計算機基礎 1. C/C++記憶體有哪幾種類型? C中,記憶體分為5個區:堆(malloc)、棧(如區域性變數、函式引數)、程式程式碼區(存放二進位制程式碼)、全域性/靜態儲存區(全域性變數、static

c語言結構體可以直接

結構體直接賦值的實現 下面是一個例項: #include <stdio.h> struct Foo { char a; int b; double c; }foo1, foo2; //define two str

C語言 線性表的操作~

#include <stdio.h> #include <malloc.h> typedef struct{ int *elem; //基地址 int length; int listsize; }Seqlist;//定義Seq這個新的資料

c# winform 實現打印功能

ble preview raw using ntp review winform setup print 1.打印控件介紹(Document屬性設置為PrintDocument1;ShowDialog()方法顯示對話窗) PrintDialog控件(打印會話):用於選擇打印

文獻:基於地基增強系統的格網虛擬觀測

2018-11-04 1. 2.可以參考的思路 3.存在問題:需要對使用者端軟體進行升級 4.   5.河南:雙差對流層延遲 在固定基線整週模糊度之後,採用雙頻消電離層組合可以準確計算出基線上的雙差對流層延遲。 相同基線長度的 GPS 和 BDS 的雙差對流層延遲影

C++與STL入門

C++與STL入門總結 寫在前面 C++的特性 1.標頭檔案的變化 2.C++標準程式庫 3.名稱空間(namespace) 4.資料型別的變化 5.指標與引用 6.字串(string) 7.結構體與

003 Python與類C語言的區別

特點 .com 裏的 mar dom info pytho alt 溢出 #寫在前面的話:重點記錄Python的特點 Python特點: 1. 無分號斷句 2. 不用擔心溢出問題 3. if-else的用法不同 #if或else後面都要添加冒號

C++構造函數對類成員變量初始化,使用初始化列表和構造函數內部直接 的差別

初始化列表 不能 構造 調用 ron 二次 art size strong 初始化和賦值對內置類型的成員沒有什麽大的差別,像任一個構造函數都能夠。但有的時候必須用帶有初始化列表的構造函數: (1) 成員類型是沒有默認構造函數的類。若沒有提供顯式初始化時,則編譯器隱式

C語言中結構體的直接

這篇文章當時寫的比較隨意,考慮到看到這篇文章的人比較多,我重新寫了一篇比較完整的釋出在我的新部落格中,大家可以參考: 一直記得C語言中,結構體是不可以直接賦值的。我問了三個同學,都說在C++中可以,在C語言中不可以,需要逐一成員賦值或者用memcpy函式

C語言結構體物件間直接

C語言中變數間互相賦值很常見,例如: int a,b; a = b; 結構體也是變數(自定義變數),兩個結構體之間直接賦值按道理應該也是可以的吧,說實話之前還從沒遇到過將一個結構體物件賦值給另一個結構體物件的(見識太淺),那麼下面做一個測試看看: #inc

C++對引數直接

在C++中,可以為引數指定預設值。在函式呼叫時沒有指定與形參相對應的實參時, 就自動使用預設引數。 預設引數的語法與使用: (1)在函式宣告或定義時,直接對引數賦值。這就是預設引數; (2)在函式呼叫時,省略部分或全部引數。這時可以用預設引數來代替。 注意: (1)預設

Python 直接、淺拷貝和深度拷貝解析

log epc uno amp 技術分享 example 內部 clas color 直接賦值:其實就是對象的引用(別名)。 淺拷貝(copy):拷貝父對象,不會拷貝對象的內部的子對象。 深拷貝(deepcopy): copy 模塊的 deepcopy

java中String new和直接的區別

字符串相同 main 基礎 還需 賦值 請問 常量 int 表達 Java中String new和直接賦值的區別 對於字符串:其對象的引用都是存儲在棧中的,如果是編譯期已經創建好(直接用雙引號定義的)的就存儲在常量池中,如果是運行期(new出來的)才能確定的

Python 直接、淺拷貝和深度拷貝全解析

ima img 引入 對象的引用 print function 引用 輸出結果 ons 直接賦值:其實就是對象的引用(別名)。 淺拷貝(copy):拷貝父對象,不會拷貝對象的內部的子對象。 深拷貝(deepcopy): copy 模塊的 deepcopy 方法

c++類的拷貝、與銷毀拷貝構造函數、拷貝運算符析構函數

錯誤 保存 編譯 oid 生成 標準庫 int 為什麽 explicit 拷貝構造函數 如果一個構造函數的第一個參數是自身類類型的引用,且任何額外參數都有默認值,則此構造函數是拷貝構造函數。 拷貝構造函數第一個參數必須是一個引用類型。此參數幾乎總是一個con

C++11六大函數構造函數,移動構造函數,移動操作符,復制構造函數,操作符,析構函數

his 類對象 多個 post highlight water iss 重獲新生 amp 在C++中,有三大函數復制控制(復制構造函數,賦值操作符,析構函數),而在C++11中,加入了移動構造函數,移動賦值操作符。我就鬥膽將他們命名為六大函數好了。 一、構造函數 c++

【shell】Linux shell 直接和間接

shell linux 變量 運維 什麽是直接賦值? 1.作者直接賦予參數值的方式稱為直接賦值。 2.一般來說,由交互的方式賦值為間接賦值。 例1: varl=arppinging.com 這種就是直接賦值,由編程作者直接賦予固定的值。 例2: [root@arppinging ~]# re

Python直接、淺拷貝和深度拷貝解析

rabl iterable bject nes 返回值 元祖 列表 深度 拷貝 ython 文件 writelines() 方法用於向文件中寫入一序列的字符串。 這一序列字符串可以是由叠代對象產生的,如一個字符串列表。 換行需要制定換行符 \n。 語法 writelines

直接and深淺拷貝

epc 圖片 分享 修改 img 都是 列表 import 變量 # 直接賦值,之後變量應用的都是同一個id()地址,後續修改所用飲用也會修改num1=[1,2,3,4]num2=num1print(id(num1))print(id(num2))num2[0]=111pr