回答
在無符號整數類型的情況下,最低的適當位數存儲在變量中。 (Brian的答案涵蓋了我在此說的所有內容。)
例如,unsigned char a = 257
將導致a=1
。
編譯器(在這種情況下爲gcc
)會在您執行此類分配時發出警告,例如, filename.c:line:column: warning: overflow in implicit constant conversion [-Woverflow]
。
根據[conv.integral]
如果目標類型是無符號,所得到的值是一致的源 整數(模2^
n
的至少無符號整數,其中n
是比特數用於表示無符號類型)。 [注:在兩個 補碼錶示中,此轉換是概念性的,並且位模式沒有變化(如果 沒有截斷)。 - 注完]如果目標類型有符號,則該值是不變的,如果它可以在目標類型(和 位字段寬度)來表示;否則,該值是實現定義的。
因此,對於您的示例,您可以可靠地得到零;如果您使用int8_t
而不是uint8_t
,則結果將由實施定義。 (相反,如果對有符號整型操作溢出,結果是不確定的行爲。爲什麼不一致?我不知道。)
至於「爲什麼?」請參閱:http://stackoverflow.com/questions/18195715/why-is-unsigned-integer-overflow-defined-behavior-but-signed-integer-overflow-is – NathanOliver
我會盡力理解它與你一起。
uint8_t
是一個8位數據類型或一個字節。它有8個插槽,可以是1
或0
。 1111 1111
將是255.所以,如果你有一個它,它繼續繼續。 255 + 1的二進制值將爲1 0000 0000
,但由於數據類型只能存儲8位,因此會丟棄1,並且變爲0000 0000
,這將轉換爲整數值0
。
至少,這就是我理解它的工作原理。
- 1. 如果您將值分配給$ _REQUEST,會發生什麼情況?
- 2. ISNULL替換值爲NULL時會發生什麼情況?
- 3. 當您在堆棧中請求更多空間時會發生什麼情況?
- 4. 當您指定的分區數量多於可用內核數量時,會發生什麼情況?
- 5. 當我使用自動重新分配時,派生類型的可分配組件會發生什麼?
- 6. git克隆是空的?爲什麼會發生這種情況
- 7. 可可API用於磁盤空間使用情況分解
- 8. 當包含lambda的類型被分配時會發生什麼?
- 9. 爲什麼會發生這種情況?
- 10. 使元素不佔用比分配空間更多的空間
- 11. IFRAME不佔用充分的空間取決於文檔類型
- 12. 發生病情時會發生什麼情況?
- 13. break語句後分配的值會發生什麼?
- 14. 爲什麼在我的情況下值類型變量比引用類型慢?
- 15. 如果在定義變量之前分配一個值,會發生什麼情況? (ALGOL作用域規則集)
- 16. 如果iOS分發證書過期會發生什麼情況?
- 17. 同名的類別會發生什麼情況?
- 18. 如果刪除+和++運算符之間的空格,會發生什麼情況?
- 19. 當從mysql中刪除數據時,它佔用的空間會發生什麼?
- 20. 禁用未讀標記的維護會發生什麼情況?
- 21. 用戶提供的超額數據會發生什麼情況?
- 22. 如果你的消費者少於分區,會發生什麼情況?
- 23. 提供配置文件過期時會發生什麼情況?
- 24. MySQL備份期間INSERT會發生什麼情況?
- 25. 結構賦值的EXC_BAD_ACCESS - 不知道爲什麼會發生這種情況
- 26. 如果超過short int(C++)的最大值,會發生什麼情況?
- 27. 如果finally塊修改從catch塊返回的值,會發生什麼情況?
- 28. 如果minSdkVersion低於targetSdkVersion,會發生什麼情況?
- 29. 將請求分派給JSP後臺會發生什麼情況
- 30. 如果我在flex中重命名命名空間,會發生什麼情況?
dupe/related:http://stackoverflow.com/questions/16056758/cc-unsigned-integer-overflow – NathanOliver
誰在投票結束這個*問題要求我們推薦或找到一本書,工具,軟件庫,教程或其他非現場資源*? – NathanOliver