回覆列表
-
1 # 長風凌空
-
2 # 重慶葉宏
C語言有指標型別,你讀取任何變數的二進位制內容太簡單了。如長浮點數double是8個位元組,每個位元組順序顯示出來,顯示成十六進方便,二進太長。
一、用sizeof(型別)取它的位元組數。
double f=5678.852;
int n=sizeof(f);
二、取該變數第一個位元組地址:
char *p=(chαr*)&f;
三、逐個位元組讀取並顯成十六進位制。
double f=5678.852;
int n=sizeof(f);
char *p=(chαr*)&f;
for (int i=0;i﹤n;ⅰ++)
{
char ⅹ=*p;
printf(″%02ⅹ″,(unsigned int)x); /*顯示*/
p++;
}
不復雜,思路簡單而清晰。我透熟。
1
這個問題確實是一個比較好的問題,但是問的方式可以變換一下。
C語言是一種高階語言,很多設定都為了符合我們程式設計師的理解做了相應的調整。機器對於變數的理解是基於電路,也就是所謂的高低電平。也是因為這個出現了一個二進位制。
而人類的計數更喜歡使用十進位制,有專家說是因為是人類當初計數使用的手指,這樣十進位制比較方便。在程式的設計上,變數的預設設定就是十進位制了。
2我們如果要操作一個變數,最後要以二進位制的操作來進行。那麼,完全可以透過一定的邏輯將這個變數轉化為二進位制。
因為無論這個變數是十六進位制,還是十進位制,最終的儲存的方式都是以二進位制的方式儲存。
而且計算機的基本電路也是與、或、非的邏輯,所以完全可以將這個變數和0X01進行與運算這樣得到第一個位的二進位制值,然後再把這個變數左移一位,準備下一個值得獲取。
3在C語言裡面這樣的運算應用的比較廣泛,尤其是微控制器的程式設計。比如並口的ADC0809以及IIC通訊的測溫晶片DHT11,還有就是數碼管的顯示,都是以這樣的方式將一個整形變數(int)轉化成二進位制變數發給晶片,然後也是將二進位制的資訊變數轉化成整形的變數傳給程式處理。
最後的話:在獲取二進位制變數時,一般要進行移位操作,它一般放在判斷變數的二進位制值之前。