我正在做一個任務,我無法弄清楚如何實現這個。我必須做一個函數sadd(int x,int y),它返回加起來的數字,除非它溢出(然後只返回最大可能的int)。我已經能夠提出一些涉及鑄造和條件語句的解決方案,但解決方案中不允許這些解決方案。只有運營商〜!^+ < < >> &和|。C中的按位飽和加法(HW)
6
A
回答
6
對於有符號數的添加,如果您添加兩個相同符號的數字並獲得不同符號的結果,則會發生溢出。由於涉及的範圍,添加兩個不同符號數量時不可能產生溢出。
所以,你可以做的是 - 僅觀察符號位(二進制補碼中最重要的位) - 使用異或來判斷兩個原始數字是否在符號上不同,補充,以便你有'0'如果不同,'1'相同。
然後,您可以對結果與其中一個輸入使用「異或」。如果它們是相同的,那麼會給出'0',如果它們不同,則會給出'1'。
如果兩個輸入相同但結果不同,則這兩個結果一起得到總體'1',否則爲'0'。
然後,您可以使用位移和OR組合來填充具有該值的整個整數。假設你是一個32位的整數,只需設置最低的31位來獲得最高值的正整數。然後你可以做的是在任何一個輸入的符號位上有一組類似的移位和OR。獨佔OR結果。如果輸入是負數,那麼它會給出最小值的整數。
編輯:哦,並使用是否有溢出的位值,擴展到填充整數,選擇什麼值返回和結果,你會返回,如果有溢出,補充它和anding它與正常的相加結果相同,然後將它們相加(或相加)。
Presto:所有二進制邏輯,無條件。我假設,因爲它是作業,你不需要實際的代碼?
相關問題
- 1. 飽和帶符號的整數加法,只用C中的按位運算符(HW)
- 2. C#中的按位加法和減法類似於C
- 3. 增加圖像飽和度
- 4. 添加具有飽和度的32位字
- 5. 無法保存已更改的位圖(已更改飽和度)
- 6. 計數浮點數(hw)C
- 7. ReadWriteLock writelock飽和
- 8. 更快的算法來改變位圖中的色相/飽和度/亮度
- 9. C++按位加法,計算代表位的最終數量
- 10. JBoss的飽和和Sonarqube
- 11. 用sass mixin增加顏色飽和度
- 12. 形成equals方法java hw
- 13. NinePatchDrawable + setColorFilter HW在Honeycomb中加速嗎?
- 14. 如何在c#中按位添加?
- 15. SSE2飽和算術
- 16. Matlab fwrite飽和度
- 17. 鎖聲明飽和
- 18. 用於數組的C++ HW *(A + 2)= 4
- 19. 「加法」和「按位加法」有什麼區別嗎?
- 20. 快速飽和並在ARM模塊中移位兩個半字
- 21. iPad的UIColor飽和問題
- 22. quickSelect在Python中的HW
- 23. 在Python和C中按位左移#
- 24. 似乎無法理解HW所要求的C++類
- 25. C中的按位運算#
- 26. C++中的按位設置
- 27. C中的按位邏輯
- 28. C中的按位運算
- 29. 轉換C#和C++按位移
- 30. 在python中創建一個飽和整數的最佳方法?
問作業問題沒問題,但你應該標記他們作爲家庭作業。 –
試一試,發佈你想出的東西。 (正如Brian所說,硬件問題沒有問題,但最好是給它一個最好的鏡頭併發布你的代碼,歡迎來到SO!) – John
沒有'if' /'else',這會變得怪異.. –