[問題] 變數overflow

看板C_and_CPP作者時間4年前 (2019/12/07 10:02), 4年前編輯推噓8(8014)
留言22則, 4人參與, 4年前最新討論串1/1
請問一下 32bit CPU 假設宣告一個變數為 unsigned short x (16 bit) 另外我也宣告一個unsigned short y (16 bit) x = 65530 (0xFFFA) y = 5 (0x0005) 實驗出來 (unsigned short) (y-x) = 0x0005 - 0xFFFA = 0xFFFF000B = 0x000B = 11 但是我如果不指定 (y - x)的資料型態 這值應該要多少 0xFFFF000B ? 而且是有signed的嗎 ? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.62.204.116 (韓國) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1575684127.A.CC4.html ※ 編輯: pougoar (223.62.204.116 韓國), 12/07/2019 10:07:04

12/07 10:15, 4年前 , 1F
我直覺告訴我這是UB
12/07 10:15, 1F

12/07 10:50, 4年前 , 2F
12/07 10:50, 2F

12/07 10:50, 4年前 , 3F
1868
12/07 10:50, 3F

12/07 10:50, 4年前 , 4F

12/07 12:24, 4年前 , 5F
不指定也一樣是unsigned short,因為運算元本身型態的
12/07 12:24, 5F

12/07 12:25, 4年前 , 6F
關係,然後靠近MSB的FFFF不會被理會,那只是處理器在做
12/07 12:25, 6F

12/07 12:27, 4年前 , 7F
運算時借位的數值,因為妳的資料型態是ushort,所以編
12/07 12:27, 7F

12/07 12:29, 4年前 , 8F
譯器只會用對應的instruction去取值。另外要注意的是處
12/07 12:29, 8F

12/07 12:33, 4年前 , 9F
理器沒有在分正負號,正負號的有無端看上層軟體怎麼看待
12/07 12:33, 9F

12/07 12:33, 4年前 , 10F
這個數值
12/07 12:33, 10F

12/07 13:14, 4年前 , 11F
2樓是對的, 答案是-65525, signed int
12/07 13:14, 11F

12/07 13:30, 4年前 , 12F
(如果int比short大)
12/07 13:30, 12F

12/07 13:42, 4年前 , 13F
看Lvalue型態
12/07 13:42, 13F

12/07 20:25, 4年前 , 14F
處理器沒有在分一筆資料是有號數還是無號數
12/07 20:25, 14F

12/07 20:36, 4年前 , 15F
處理器沒在分 但是c/c++標準有規定是有號還是無號啊
12/07 20:36, 15F

12/07 20:41, 4年前 , 16F
或者換個講法, (y-x)>>1的shift要用SAR還是SHR?
12/07 20:41, 16F

12/07 20:42, 4年前 , 17F
標準會跟你說y-x是signed所以這邊用SAR
12/07 20:42, 17F

12/07 21:02, 4年前 , 18F
L大意思就是軟體層(e.g. 語言規格書)在做正負區分吧
12/07 21:02, 18F

12/07 21:03, 4年前 , 19F
話說如果y,x無法靜態得知是不是就用SHR呢?
12/07 21:03, 19F

12/07 21:07, 4年前 , 20F
阿應該是看資料型態來判別就好
12/07 21:07, 20F

12/07 21:18, 4年前 , 21F
我只是看你說處理器沒在分正負號碼怪怪的,沒有想那麼
12/07 21:18, 21F

12/07 21:18, 4年前 , 22F
12/07 21:18, 22F
文章代碼(AID): #1TwmWVp4 (C_and_CPP)