回覆列表
  • 1 # 長風凌空

    1

    這個問題確實是一個比較好的問題,但是問的方式可以變換一下。

    C語言是一種高階語言,很多設定都為了符合我們程式設計師的理解做了相應的調整。機器對於變數的理解是基於電路,也就是所謂的高低電平。也是因為這個出現了一個二進位制

    而人類的計數更喜歡使用十進位制,有專家說是因為是人類當初計數使用的手指,這樣十進位制比較方便。在程式的設計上,變數的預設設定就是十進位制了。

    2

    我們如果要操作一個變數,最後要以二進位制的操作來進行。那麼,完全可以透過一定的邏輯將這個變數轉化為二進位制。

    因為無論這個變數是十六進位制,還是十進位制,最終的儲存的方式都是以二進位制的方式儲存。

    而且計算機的基本電路也是與、或、非的邏輯,所以完全可以將這個變數和0X01進行與運算這樣得到第一個位的二進位制值,然後再把這個變數左移一位,準備下一個值得獲取。

    3

    在C語言裡面這樣的運算應用的比較廣泛,尤其是微控制器的程式設計。比如並口的ADC0809以及IIC通訊的測溫晶片DHT11,還有就是數碼管的顯示,都是以這樣的方式將一個整形變數(int)轉化成二進位制變數發給晶片,然後也是將二進位制的資訊變數轉化成整形的變數傳給程式處理。

    最後的話:

    在獲取二進位制變數時,一般要進行移位操作,它一般放在判斷變數的二進位制值之前。

  • 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++;

    }

    不復雜,思路簡單而清晰。我透熟。

  • 中秋節和大豐收的關聯?
  • 喝一杯咖啡等於多少運動?