搜尋

首頁  >  問答  >  主體

c++缩小转换的时候int变量赋值给char变量重输出时为什么是32?

巴扎黑巴扎黑2806 天前582

全部回覆(2)我來回復

  • 伊谢尔伦

    伊谢尔伦2017-04-17 13:10:09

    轉換的時候不會全部放1,注意下面
    這是2000 的二進位表示‭0100 1110 0010 0000‬
    在縮短到1 bytechar 後,應該是保留後面的0010 0000‬ ,而這個數十進位表示就是32

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 13:10:09

    首先你需要去看一本叫D&E的書. 再者, 這個鍋應該摔給C語言.
    C++在設計的時候就想要去兼容C語言, 所以char和int之間的隱式轉換(沒有任何編譯錯誤警告)是C帶來的. 而一個大於char最大值的int, 轉化成char時, 這個行為應該是未定义行为. 具體就不要深究了, 你只需要知道這樣寫程式碼是不對的.

    PS:
    樓上給你的解釋, 只是一個特定編譯器下的實現, 站在未定義行為的角度看, 不管任何編譯器怎麼實現, 他都是合法的.
    我記得以前寫程序用移位操作, 當時並不太清楚用有符號整數會出現什麼後果, 結果後來程序在gcc下面跑的很好, 在vc下面就是不行. 直到後來看書, 後來所有的位運算都用uint32_tunint64_t.

    The value of E1 >> E2 is E1 right-shifted E2 bit positions. If E1 has an unsigned type or if E1 has a signed type and a non-negative value, the value of the result is the integral part quotient of E1/2E2. If E1 has a signed type and a negative value, the resulting value is implementation-defined.

    回覆
    0
  • 取消回覆