回答
這是按位否定。這意味着它會在數字的每一位執行二進制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. Objective-C中的@意味着什麼?
- 2. [](){}構造在C++中意味着什麼?
- 3. #pragma在C中意味着什麼?
- 4. 在C++中意味着什麼?
- 5. 在AngularJS中結尾意味着什麼double意味着
- 6. 用C什麼median_unsafe ++意味着
- 7. 什麼將T [,]意味着C#
- 8. 爲什麼呢(;;)意味着C#
- 9. 什麼是({});意味着在C++?
- 10. PREEMPTIVE_XE_DISPATCHER這意味着什麼?
- 11. Field.Index.NOT_ANALYZED_NO_NORMS意味着什麼
- 12. $這意味着什麼PHP?
- 13. 什麼===在PHP意味着
- 14. MYSQLI_NUM意味着什麼?
- 15. * | *這意味着什麼CSS?
- 16. 溢出意味着什麼?
- 17. HttpServletResponse.SC_BAD_REQUEST意味着什麼?
- 18. 什麼呢JDBC:HSQLDB:hsqlTempFiles意味着
- 19. 奎因意味着什麼?
- 20. matlab中的參數意味着什麼?
- 21. Handler.sendEmptyMessage中的零意味着什麼(0)
- 22. perl中的〜意味着什麼?
- 23. matplotlib中bar3d的zsort意味着什麼
- 24. jQuery中的$([])意味着什麼
- 25. robots.txt中的加號意味着什麼?
- 26. JavaScript中的豎條意味着什麼?
- 27. preg_match中的符號意味着什麼?
- 28. MySQL中的節點意味着什麼?
- 29. Verilog中的變量意味着什麼?
- 30. Groovy中的「private」意味着什麼?
嗅到作業。 – pankajt 2010-07-06 18:13:21