回答
這是按位否定。這意味着它會在數字的每一位執行二進制NOT運算符。例如:
int x = 15; // Binary: 00000000 00000000 00000000 00001111
int y = ~x; // Binary: 11111111 11111111 11111111 11110000
當加上&操作者它用於清除位。因此,在您的示例中,這意味着var2+7
結果的最後3位設置爲零。
正如在評論中指出的,它也被用來表示析構函數,但在你的例子中不是這種情況。
7的二進制是00000111,所以〜7是11111000(假設是一個8位字節)。代碼作者正在使用它進行位掩碼。
它可能不是位掩碼 - 它可能只是四捨五入到最近的8位(出於某種原因)。 – corsiKa 2010-07-06 14:19:04
這不僅僅假設一個8位字節,而是一個1字節的'int',這對任何符合標準的C編譯器都是錯誤的假設。 – sepp2k 2010-07-06 14:19:56
我想他只是想避免寫太多的二進制數字,並在同一時間通過示例解釋不操作。然而,非八位字節可能存在,所以他只是指定例子是在一個字節上做出的,並且該字節有8位。 – ShinTakezou 2010-07-06 14:25:14
這是一個按位不是。不要與邏輯不相混淆(這是!),它會翻轉邏輯值(true爲false,反之亦然)。該運算符翻轉變量中的每一位。
此代碼將var1舍入爲最接近的n * 8數字。 &〜7將最後3位設置爲0,舍入到8 * n。
如上所述,代碼的作用是將值四捨五入爲八的更高倍數。我的首選公式是「var1 =(var2 | 7)+1;」但要理解的表達作爲寫入,這是最有幫助的從外向內理解。
雖然「&」和「〜」是單獨的運營商,具有不同的優先級的規則,執行「的概念= B &〜Ç ;」是非常有用的一個,它在真正的意義上值得自己的操作符(它會允許更合理的整數提升規則等)。基本上,「a = b &〜c;」用來取消'b'中'c'中的任何位(如果'b'長且'c'不是,由於整數提升規則,它也取消了更高的位)。如果'c'是2^N-1,則表達式將抵消底部的N位,這相當於向下舍入到2^N的下一個倍數。
寫入的表達式在將結果舍入到8的下一個倍數之前將var2加7。如果var2是8的倍數,則加7將不會完全達到8的下一個更高倍數,否則它會。因此,整個表達式將四捨五入到8的下一個倍數。
順便說一下,我的首選公式將數字四捨五入到數字的下一個較高的值,該值剛好小於8的倍數,然後將其顛倒爲下一個倍數。它避免了重複的魔術數字「7」,並且在一些指令集中該方法將節省代碼。
- 1. **在C/C++中意味着什麼?
- 2. Objective-C中的@意味着什麼?
- 3. 這在C中意味着什麼?
- 4. 我在C++中意味着什麼?
- 5. #pragma在C中意味着什麼?
- 6. (* var)[n]在C++中意味着什麼
- 7. 在C++中意味着什麼?
- 8. [](){}構造在C++中意味着什麼?
- 9. <?=這在C++中意味着什麼?
- 10. 什麼%*%意味着R中
- 11. 什麼的 - >目標C意味着
- 12. 什麼?意味着iOS的
- 13. 在AngularJS中結尾意味着什麼double意味着
- 14. 用C什麼median_unsafe ++意味着
- 15. 這些警告意味着什麼C
- 16. 爲什麼呢(;;)意味着C#
- 17. 什麼是 「[這]」 意味着C++
- 18. C - while(* Table [i])意味着什麼?
- 19. 什麼是「|」意味着在C#編程?
- 20. 什麼?和:意味着在C + +?
- 21. 是什麼[和]意味着C++
- 22. 什麼是({});意味着在C++?
- 23. 什麼將T [,]意味着C#
- 24. void **意味着什麼
- 25. PREEMPTIVE_XE_DISPATCHER這意味着什麼?
- 26. Field.Index.NOT_ANALYZED_NO_NORMS意味着什麼
- 27. HttpServletResponse.SC_BAD_REQUEST意味着什麼?
- 28. 什麼呢##意味着在$ {}
- 29. Solr意味着什麼?
- 30. 溢出意味着什麼?
嗅到作業。 – pankajt 2010-07-06 18:13:21