[英]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.