嵌入式開發 按位取反操作

2021-10-12 01:45:44 字數 843 閱讀 5631

按位取反,這個實際用到一些計算式知識,你得先清楚原碼、反碼、補碼這幾個概念。

首先我們要知道

計算機底層的儲存方式:所有資料都是以二進位制形式存在的。

二進位制資料的儲存方式:所有的數值,不論正負,都是以補碼方式儲存的(因為計算機只會加不會減,所以有了補碼的形式)。

二進位制是機器語言,1、0表示高低電頻,使機器的處理起來更加高效便捷。

三條規則

1.計算機數字運算均是基於補碼的

2.正數的原碼、反碼、補碼都是一致的

3.負數的補碼是反碼+1,反碼是對原碼取反,只是最高位(符號位)不變

現在再來看按位取反操作,比如~4 = -5;對4進行取反操作,得到-5,為什麼呢?

首先看4的二進位制表示: 0000 0000 0000 0000 0000 0000 0000 0100

執行取反操作後~4變成:1111 1111 1111 1111 1111 1111 1111 1011

現在得到這麼一串數字即原碼(1111 1111 1111 1111 1111 1111 1111 1011):可以發現它的最高位(即最左邊一位)是1,表明它的負數,由前面幾條規則可知如果是正數,則原碼、反碼、補碼一致,那它現在是負數,則需要轉換成補碼才能存入計算機中,負數的原碼轉換成補碼,先對原碼取反,得到反碼,再加1,得到補碼。

即原碼 1111 1111 1111 1111 1111 1111 1111 1011

得反碼 1000 0000 0000 0000 0000 0000 0000 0100(注意求反碼符號位不變)

加一 1000 0000 0000 0000 0000 0000 0000 0101 = -5

看到這裡,你應該理解按位取反的操作了吧。

嵌入式 位 bit 操作

嵌入式系統總是要使用者對變數或暫存器進行位操作。給定乙個整型變數 a,寫兩段 第乙個設定a的 bit 3 第二個清除a 的 bit 3 在以上兩個操作中,要保持其它位不變。對這個問題有三種基本的反應 1 不知道如何下手。該被面者從沒做過任何嵌入式系統的工作。2 用 bit fields bit fi...

嵌入式程式設計 c位操作

在學習c語言位操作前需要具備十六進製制和二進位制的知識以及從二進位制與十六進製制的相互轉換,相應的教程請移步新增鏈結描述 現在掌握了十六進製制和二進位制之間的相互轉換知識,我們可以從c中的按位 或位級別 運算開始。基本上有6種型別的按位運算子。這些是 1.以 表示 或 運算子 2.以 表示 與 運算...

嵌入式開發

經常會有人說嵌入式開發,嵌入式開發千差萬別,我總體上分為4個等級 微電子開發 rtos開發 指令碼開發 富應用開發 這一類產品行為比較固定,比如說電視遙控器,遙控汽車,電飯煲,恆溫燒水壺,溫濕度感測器,智慧型門鎖等。這些裝置行為都比較簡單,通過按鈕可以設定系統功能和行為。量不大,經常會選用flash...