首頁>Club>
54
回覆列表
  • 1 # 不會編彙編

    因為%u是對應於無符號整型資料,-1這個數本身是隻存在於有符號數值型別中的,將它強制轉換為無符號型別的時候就出現了向下越界,於是就變成了你看到的4294967295。

    至於為什麼是4294967295這個數,就要從整型數值在記憶體中的儲存形式說起了。

    一個32位的整型數值在記憶體中就是由32個01組成的,運用簡單的數學知識即可知道,32個0或1一共有2^32種組合形式,也就是對應了2^32個數。

    無符號的情況很好理解,這2^32個數,就是從0到2^32-1的所有整數,而2^32-1是多少?就是它:4294967295,它在記憶體中就是32個1。

    有符號的情況下,C語言規定這32個01表示的是從-2^16到2^16-1,0被分到了正數這一邊。很容易知道,0在記憶體中就是32個0,剩下的所有正整數都是對應於二進位制直接儲存在32個01裡。

    而負數的表示呢,其實也很簡單,假想在32個01最前面再加個1,變成33位。此時的0就對應於二進位制1000...000,它減一就等於二進位制0111...111,也就是-1了。

    所以這個時候就能看到,有符號的-1和無符號的4294967295在記憶體中都是32個1,然後就出現了題目中描述的情況了。

  • 中秋節和大豐收的關聯?
  • 氯丙嗪商品名有哪些?