& 位与运算符(都为1结果才是1) //1010 1010 & //1011 0101 //------------ //1010 0000 int sRes = 0b10101010 & 0b10110101; system("pause"); 二进制数需要由0b开头 十六进制0x开头 | 位或运算符(有1则为1,全0才为0) //1010 1010 & //1011 0101 //------------ //1011 1111 int bRes = 0b10101010 | 0b10110101; ~ 位非运算符(0变1,1变0) //10101010 ~ //------------ //01010101 int bRes = ~0b10101010; ^ 异或运算符 : 相同为0,不同为0,如果两个都是0,那么结果为0 //10101010 ^ //11110100 //------------ //01011110 int bRes = 0b10101010 ^ 0b11110100; 异或加密: char cA = 'A'; char cB = 'B'; char cT = cA ^ cB; printf("%x %c %c", cT, (cT ^ cB), (cT ^ cA)); 输出的值为3 A(cT^cB) B(cT^cA),当两个数据(cA,cB)进行异或操作得到第三个值(cT)以后,那么这个时候第这三个数据两两进行异或后会得到第三个数据。(最简单的异或加密) >> 左移运算符(补位机制:都补0) //00000001 << 5 // ---------- //00100000 32 char cTemp = 0b00000001; char cRes = cTemp << 5; << 右移运算符 (补位机制:符号位为1时,用1进行补位,符号位为0时,用0进行补位) //10010000 >> 3 => 11110010 //00010000 >> 3 => 00000010 char cTemp = 0b10010000; char cRes = cTemp >> 3;
C-位运算符
最新推荐文章于 2024-05-16 16:03:07 发布