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 @   学而不思则罔!  阅读(453)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界
点击右上角即可分享
微信分享提示