位运算
总阅读次
文章目录
位运算优先级:~
—-><<
—-> >>
—–> &
——> ^
——->|
——->
以下实例代码中:位都是 从0位开始算起
unsigned shot 一般都是16位;
i|=j;
2个对象位或运算,只要其中对象中的位有1位为1则1,否则为0;
i&=j;
2个对象进行与运算,只要2个位运算同时为1则为1,否则为0;
- 位的清除
1
i &= ~(1 << j); /* 将第j为设为0,其它位不变(利用`&`与) //掩码:第j位为0,其它为1 */
也可以复合使用
1 | i&=~(j|k); /* 把j和k所有带1的位设为0*/ |
- 位的测试也可以复合测试
1
if(i & 1 << j) /* 检查第j位的值是>1还是<0 */
1
XOR加密
将每一个字符与密钥&
进行异或(XOR即^
)运算
1 |
|
换而言之,解密只需要将加密的消息再次加密,即可得到原始的消息.
注意:该程序不会改变一些字符,包括数字。因为将这些字符与&异或会产生不可见的控制字符,这些在操作系统中会引发问题。
isprint()
函数:判断字符是否为可打印字符
**
可打印字符的ASCII码值
**大于 0x1f(除了0x7f(DEL)),这些字符可以显示到屏幕上,让我们看到;不能显示在屏幕上,我们看不到的,叫控制字符,ASCII码值为 0x00 ~ 0x1f,再加上 0x7f(DEL)。检测控制字符请使用 isiscntrl() 函数。
其他:%p
可以输出二进制
参考程序
1 |
|