所以我有一個問題,我的班,我有麻煩開始。我不是要求人們爲我解決問題,我只是想向正確的方向推動。我需要在C中創建一個函數,當給定任何32位整數時,它返回一個整數,其中每個第4位設置爲從最小sig位開始的1。我明白到底它應該是什麼樣子,但是開始我迷失了方向。我們不允許使用任何for循環或條件,只是標準的按位和邏輯運算符(!〜&^| + < < >>)。再一次,我沒有要求任何人爲我做這件事,我只想幫助我思考正確的道路。我在這裏和其他網頁上看到了其他一些帖子,但似乎沒有人點擊。我知道你可以將1移到某個特定的地方,但除此之外,我被卡住了。任何幫助,將不勝感激。幫助開始分配特定位
2
A
回答
0
結賬bitmasking。
... 因此,要確保一點上,也可以用1來退出一點不變,或使用一個0
所以掩蓋你的情況下(而其它位不變)將是:
二進制:10001000100010001000100010001000
十六進制:88888888
1
你能寫下來(十六進制)的32位整數,其中的每第4位設爲1,所有其他位設爲0?
現在,是否有一個操作可以應用於您的輸入和這個幻數,它將輸入的每個第4位設置爲1,而是讓其他位保持獨立?
2
int get_int_with_every_fourth_bit_set()
{
return 0x88888888;
}
好吧,那大部分都是非常有趣的。這是一個什麼樣的位運算符做一個列表:
- 位NOT(
~
):切換位,0比1和1比0 - AND(
&
):設置一個位,如果在該位置的位在兩個操作數 - OR被設置(
|
):如果在該位置的比特中任一操作數被設定設定位 - XOR(
^
):如果在該位置正好一個位被設置在兩者之間設定位操作數 - 按位移(
<<
和>>
):在指定的方向上移動指定量的每一位。當左移時,零被添加到最低有效位。右移時,如果該值爲無符號或正值,則將添加零。
這裏有一些按位技巧,好知道:
按比特移位由一個離開相同乘以2。按位向右移動與按2分割相同,並向下舍入。
兩個的所有冪只有一個1位。要看到,如果一個數是2的冪,你可以這樣做:
return !(x & (x - 1)) && x
舉個例子,說x = 16
,這是兩個電源。然後,x - 1 = 15
,所以要進行與運算的值是00010000
和00001111
。由於每個位的位置在兩個操作數中的至少一箇中具有零,所以結果爲零。 !0
爲真,因此請檢查x != 0
。由於16 != 0
,該語句返回true。如果您使用不是2的冪而不是0的數字進行嘗試,則x & (x - 1)
檢查將始終爲真。非常酷!
另一個祕訣:因爲0^0 = 0
和1^1 = 0
,您可以使用XOR看什麼位有變化。例如,如果您有兩個字節並且希望看到之間發生變化的位,則兩個字節的異或將在所有已更改位的位置上給出1。
相關問題
- 1. JXMapKit幫助開始
- 2. 開始Java(幫助)
- 3. 幫助JavaScript分配
- 4. 幫助開始使用Boost.Test
- 5. Joomla開始需要幫助
- 6. 幫助PHP會話開始
- 7. 需要幫助開始HL7
- 8. 配置VS 2010幫助特定主題
- 9. CSS定位幫助
- 10. 幫助CSS定位
- 11. CSS:Div定位...幫助
- 12. CSS定位幫助
- 13. IE定位幫助
- 14. css定位幫助
- 15. 陣列分配幫助
- 16. 分片配置的幫助
- 17. 幫助與CSS定位
- 18. 幫助定位元素
- 19. 相對定位幫助
- 20. 需要CSS定位幫助
- 21. 需要CSS定位幫助
- 22. 幫助定位搜索欄
- 23. 需要幫助定位
- 24. HTML/CSS定位幫助
- 25. 從特定光標位置開始RecyclerView
- 26. MapView捕捉到原始位置 - 幫助!
- 27. 以編程方式在eclipse幫助窗口中打開特定幫助主題?
- 28. 需要幫助開始與Eclipse RCP
- 29. 開始使用(需要幫助)
- 30. 幫助開始使用OO PHP和MySQL
也許OP在尋找'a_32bit_int | 0x88888888'? –
對不起,不知道這個問題已經過去了幾年... –