回答
这是按位否定。这意味着它会在数字的每一位执行二进制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