簡體   English   中英

C-無需計算機即可進行數據類型轉換

[英]C - data type conversion without computer

我有一個來自學校測試的樣本問題。 在紙上解決問題最簡單的方法是哪種?

問題:
運行時系統使用二進制補碼表示整數。 數據類型int的大小為32位,數據類型short的大小為16位。 printf顯示什么? (答案是ffffe43c

short int x = -0x1bc4; /* !!! short */

printf ( "%x", x );

讓我們分兩步進行:1bc4 = 1bc3 + 1

首先,我們對此進行詳細介紹:

0 - 1 = ffffffff

然后

ffffffff - 1bc3

這可以通過符號來完成

 ffffffff
-
 00001bc3

你會得到你有結果

由於您的x為負數,請對其取二的補數,將得到:

2's(-x) = ~(x) + 1

2's(-0x1BC4) = ~(0x1BC4) + 1 => 0xE43C

0x1BC4 = 0001 1011 1100 0100
~0X1BC4 =1110 0100 0011 1011
+1 =     [1]110 0100 0011 1100 (brackets around MSB)

這就是您的電話號碼在內部的顯示方式。

現在%x需要一個32位整數,因此您的計算機將對您的值進行符號擴展,從而將MSB復制到該值的高16位,這將產生:

1111 1111 1111 1111 1110 0100 0011 1100 == 0xFFFFE43C

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM