28.二进制的按位运算和移位运算(~、&、|、^、<<、>>)
#include <stdio.h> //fopen函数的包 int main() { unsigned char ch = 'a'; printf("二进制 01100001 的真值::%d\n", ch ); unsigned char ch1 = ~ch; printf("二进制 01100001 反码的真值::%d\n", ch1 ); unsigned char and = ch & ch1; printf("二进制 01100001 & 10011110 的结果:%d \n", and ); unsigned char or = ch | ch1; printf("二进制 01100001 | 10011110 的结果:%d \n", or ); unsigned char or1 = ch ^ ch1; printf("二进制 01100001 ^ 10011110 的结果:%d \n", or1 ); unsigned char left = ch << 1 ; printf("01100001 << 1 的结果为:%d\n",left); unsigned char right = ch >> 1 ; printf("01100001 >> 1 的结果为:%d\n",right); /* 1.按位取反:~ a为1byte也就是8bit存储数据,a(无符号)对应的二进制数为01100001,真值为97 01100001 对应的反码为 10011110,真值为 158 2.按位与: 01100001 & 10011110 对应为都为1时,结果才为1 01100001 10011110 -00000000 真值为0 3.按位或: 01100001 | 10011110 对应有一个1时,结果就为1 01100001 10011110 -11111111 真值为 255 4.按位异或: 01100001 ^ 10011110 对应有当且仅当只有一个为1,结果才为1 01100001 10011110 -11111111 真值为 255 5.左移:<< int 对象的每一位向左移动指定位数,移除左侧末端的值会丢失。 01100001 << 1 011000010 真值为 194 6.右移:>> int 对象的每一位向右移动指定位数,移除右侧末端的值会丢失。 01100001 >> 1 001100001 真值为 48 */ return 0; }