此篇文章极简,目的是在作者本人能快速熟记的同时也能帮助大家理解。
🐧 什么是按位取反 ~
按位取反运算符 ~:把数据的每个二进制位取反,即把0变成1,把1变成0。
没错就是这样通俗易懂。
🐧 ~与原码、反码和补码有一定关联
举例:
我们在多组输入的题目中经常能看到以下不同类型的多组输入,但道理是一样的。
while(~scanf("%d",&a)
while((scanf("%d",&a)!=EOF)
我们知道!=EOF是读取不为空,那么~scanf("%d",&a)是什么意思呢?
~scanf("%d",&a)等价于~EOF,而EOF=-1,所以这里就涉及到了按位取反操作符。
EOF=-1为整数,整数在内存中是以补码的形式存储的,-1的补码是多少呢?
~EOF就是在EOF补码的基础上按位取反