亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將正符號 int32 值轉換為負值?

如何將正符號 int32 值轉換為負值?

Go
慕容3067478 2021-12-07 15:40:14
我嘗試編寫一種邏輯是將int32正值轉換為相應的負值,即abs(negativeInt32) == positiveInt32.我已經嘗試過:第一的:fmt.Printf("%v\n", int32(^uint32(int32(2) -1)))這會導致錯誤: prog.go:8: constant 4294967294 overflows int32第二:var b int32 = 2 fmt.Printf("%v\n", int32(^uint32(int32(b)-1)))這導致-2.兩者如何導致不同的結果。我認為他們是平等的。play.golang.org編輯編輯替換uint32用int32的第一種情況?;卮饘τ谀切┯龅竭@個問題的人,我自己已經回答了這個問題。:)
查看完整描述

2 回答

?
泛舟湖上清波郎朗

TA貢獻1818條經驗 獲得超3個贊

這兩個結果是不同的,因為第一個值被類型轉換為unsigned int32 (a uint32)。

這發生在這里:uint32(^uint32(int32(2) -1))
或更簡單地說:uint32(-2)

Anint32可以存儲 -2147483648 和 2147483647 之間的任何整數。
總共有 4294967296 個不同的整數值(2^32...即 32 位)。

一個無符號INT32可以存儲相同不同的整數值,但是丟棄該標志(+/-)。換句話說,無符號int32 可以存儲從 0 到 4294967295 的任何值。

但是,當我們一個類型轉換會發生什么簽訂INT32(與值-2),以一個無符號INT32,它不可能存儲-2價值?

正如你所發現的,我們得到了 4294967294 的值。在一個小于 0 的整數是 4294967295 的數字系統中;4294967294 恰好是 0 - 2 的總和。


查看完整回答
反對 回復 2021-12-07
?
慕妹3146593

TA貢獻1820條經驗 獲得超9個贊

偶爾,我了解到為什么我們不能做


fmt.Printf("%v\n", int32(^uint32(int32(2) -1)))

在編譯時。它被^uint32(int32(2)-1)視為constant具有uint32類型的值。它的價值是4294967294。這超過了int32for的最大值2147483647。所以當你go build在源代碼文件上運行時。Compile error顯示。


這個問題的正確答案應該是:


fmt.Printf("%v\n, ^(int32(2) - 1))

即,我們應該先得到1in int32type的對應值,然后將其轉換為two's complementary formas 的值-1。


但是,根據這個 golang blog的An exercise: The largest unsigned int部分,這在運行時是合法的。所以代碼


var b int32 = 2

fmt.Printf("%v\n", int32(^uint32(int32(b)-1)))

沒關系。


而且,最后說到這和 Golang 中的常量有關。:)


查看完整回答
反對 回復 2021-12-07
  • 2 回答
  • 0 關注
  • 525 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號