#include
#include
#include
int main()
{uint8_t a = 2;
uint8_t b = ~a;
//轉換為int時,自動在前面補0
printf("%d\n", b);
printf("%d\n", ~a);
system("pause");
return 0;
輸出結果:
-3-3
學習位運算,時,執行上述程式,竟然結果不一樣. 發現時型別問題
~2也就是~a是對於整型int而言的2按位取反,
int 4位元組, 32位,
2對應二進位制: 0000 0000 0000 0000 0000 0000 0000 0010
取反得到 -3: 1111 1111 1111 1111 1111 1111 1111 1101
而uint8_t或者unsigned char為一位元組, 8位
a = 2在記憶體中儲存形式: 0000 0010
對a按位取反得到b :1111 1101, 也就是乙個位元組意義上的253
然後按%d十進位制整數,十進位制int整型輸出, 系統會於是將8位的b: 1111 1101補零拓展為0000 0000 0000 0000 0000 0000 0000 1111 1101, 即int型的253;
按位與 按位異或 按位取反
按位與 按位或 按位異或 1.按位與運算 按位與運算子 是雙目運算子。其功能是參與運算的兩數各對應的二進位相與。只有對應的兩個二進位均為1時,結果位才為1 否則為0。參與運算的數以補碼方式出現。例如 9 5可寫算式如下 00001001 9的二進位制補碼 00000101 5的二進位制補碼 0000...
按位與 按位異或 按位取反 分析
按位與 按位或 按位異或 1.按位與運算 按位與運算子 是雙目運算子。其功能是參與運算的兩數各對應的二進位相與。只有對應的兩個二進位均為1時,結果位才為1 否則為0。參與運算的數以補碼方式出現。例如 9 5可寫算式如下 00001001 9的二進位制補碼 00000101 5的二進位制補碼 0000...
python 中按原碼取反 按位取反
在python中,按位運算的結果與c c 中位運算結果不同,原因主要是c c 是按原碼來取反。而在python中,取反的運算的流程是這樣的 先獲得其二進位制 原碼 進行取反操作。將第一步的結果,當作補碼。求這個補碼的原碼,這個原碼就是輸出的結果。補 碼求原碼的過程,先減1,再取反。由於是這樣的邏輯,...