比較基礎的東西,平時用的不多,真到碰到時卻不會用了,下面是整理的一些資料
int型別即int32, 由4個位元組32位表示,高第31位(編號從零開始)用來表示正負,1為負數,0為正數 (左表示高位,右表示低)
int 型別的負數是採用補碼來表示的,即在對應的int型別正數上按位求反後再加1
比方計算-1,其正數為 0000000...001(31個零跟乙個1) 那麼按位求反後應該是 111111111....10 ,再加1的結果是11111111...111(32個1).
long型別跟int類似,只不過long由8位元組64位表示
資料轉換常用**
//將16進製制數0xffffffff轉換為整數(int32)
messagebox.show( convert.toint32("ffffffff", 16).tostring()); //顯示 -1
//將2進製數11111111轉換為整數(int32),注意11111111 等效於 0000...00011111111 (前面24個零)
messagebox.show(convert.toint32("11111111",2).tostring());// 顯示 255
//將整數-1轉換成2進製字串
messagebox.show(convert.tostring(-1, 2)); // -1的二進位制表示,顯示11111....11 (32個1)
//將整數-1轉換成16進製制字串
messagebox.show(convert.tostring(-1, 16)); // -1的16進製表示,顯示ffffffff
使用bitconverter
byte bytes = new byte ;
//取bytes資料的第0個到第3個元素(int型別有4個位元組) ,轉化成整數
messagebox.show( bitconverter.toint32(bytes, 0).tostring()); //顯示 -1;
//將byte 陣列表示成十六進製制字串序列,各元素轉化後用 "-"連線,順序不變
messagebox.show( bitconverter.tostring(bytes)); //顯示 ff-ff-ff-ff-0-0
//獲取10(int32)的位元組陣列
byte arr=bitconverter.getbytes(10); //生成的陣列為
messagebox.show(bintconverter.tostring(arr)); //顯示為0a-0-0-0;
這裡注意10的int32記憶體表示方法是 00-00-00-0a(高位元組左邊低位元組在右邊) ,而上面的是通過binconverter轉化後是高位元組在右邊低位元組在左邊.
使用位操作
在開發一些帶許可權控制的功能時我們有可能用到位操作,
比方系統中有一些資源,每個資源對應一組操作,假設有8種操作
這個時候你就可以設計這麼一張表
資源使用者操作表(使用者名稱,資源號,操作型別)
一些資料:
tools 1, 1
tools 2, 2
tools 1 , 3
alsve 3, 1
alsve 1,2
在上面我們用數字1~8表示8種操作,顯然如果乙個使用者對某一資源擁有全部許可權的話就需要8條記錄來表示,如果使用者達到幾十萬級別時這個表的資料量將會很龐大.
改用位來表示操作
資源使用者操作表(使用者名稱,資源號,運算元)
這裡我們使用了運算元,他是int型別的整數 我們使用其低8位來表示某使用者對某資源擁有操作,對應位為1則表示有相應許可權,為零則表示沒有.
在上面的規則下我們需要用到以下操作
1.判斷某一位是否為1 即使用者是否擁有某資源的某一操作,
bool表示式 (運算元 & (1<< 位置)) > 0;
2.設定某一位為1,即將某一資源的某一操作分配給使用者
運算元=運算元 | (1《位置);
3. 設定某一位為0,即將使用者對某一資源的某一操作取消
運算元=運算元 & (~(1《位置)); //移位後,按位求反,再與運算元做與操作
一些實現細節
使用者登入後一次性將使用者的資源運算元據載入到 hashtable裡(包括使用者屬於的角色分配的資源運算元據)
**類似如下:
foreach(...)
當然使用者會屬於一些角色的,而給角色分配的資源操作可能跟給使用者分配的資源操作重疊,
這個時候就需要將2者合併, 修改後的**類似如下
foreach(....)
else
}hashtable可以方便的序列化,序列化後的資料可以儲存在 session(使用sql儲存session)或者儲存在加密的viewstate裡面,當然同樣可以把viewstate儲存到sql伺服器裡,不過,使用sql session 比較方便
C 中的位操作
位操作符是對資料按二進位制位進行運算的操作符。c 位操作符包括 按位與 按位或 按位取反 左移 右移 舉例說明 using system class mikecat a 6的二進位制是00000110,3的二進位制是00000011,按位與後等於00000010,即2。int b 6 3 conso...
C 中的位操作
位操作符是對資料按二進位制位進行運算的操作符。c 位操作符包括 舉例說明 using system class mikecat a 6的二進位制是00000110,3的二進位制是00000011,按位與後等於00000010,即2。int b 6 3 console.writeline b b 6的...
C 中的位操作
位操作符是對資料按二進位制位進行運算的操作符。c 位操作符包括 舉例說明 using system class mikecat a 6的二進位制是00000110,3的二進位制是00000011,按位與後等於00000010,即2。int b 6 3 console.writeline b b 6的...