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;
}

 

posted @ 2021-08-08 11:05  学而不思则罔!  阅读(463)  评论(0)    收藏  举报