位操作

C语言并没有规定一个字节的尺寸


逻辑位运算符

只作用于整型,对操作数中的每个二进制位起作用
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
异或^
在这里插入图片描述

在这里插入图片描述

和赋值号结合

四个运算符,除了按位取反只有一个操作数之外,其他三个都可以与赋值号结合到一块,使得代码更加简洁


int mask=0xFF;
int v1=0xABCDEF;//0x表示是16进制
int v2=0xABCDEF;
int v3=0xABCDEF;

v1 &=mask;
v2 |=mask;
v3 ^=mask;
printf(""v1=0x%X\n,v1);//这是二进制打印的格式
printf(""v2=0x%X\n,v2);//这是二进制打印的格式
printf(""v3=0x%X\n,v3);//这是二进制打印的格式

打印结果
在这里插入图片描述

位域

允许将字节拆开来使用
在这里插入图片描述
在结构体的基础上变形而来

Struct Test
{
unsigned int a:2;
unsigned int b:1;
unsigned int c:1;
};//用了冒号 与普通结构体不同 冒号后面的数字表示占了多少位,这里表示一共占了4位

成员c存不进2,因为十进制2的二进制表示为10,需要2位表示。
位域必须要大于要存储的数据的大小。

移位和位操作的应用

C语言还提供了可以将某个变量中所有的二进制位进行左移或者右移的运算符----移位运算符

左移

11001010<<2//左边是被移位的数据,左移箭头朝左
在这里插入图片描述
空缺位置要用0进行填充

右移

11001010>>2
在这里插入图片描述

和赋值号结合
int main()
{
   int value=1;
while(value<1024)
{
value<<=1;
printf("value=%d\n",value);
}
putchar('\n');
printf("------------------");
int value1=1024;
while(value1>0)
{
value1>>=2;
printf("value1=%d\n",value1);
}
putchar('\n');

   return 0;
}

在这里插入图片描述
左移一位是乘2的1次方
右移一位是除以2的1次方,右移两位就是除以2的2次方

未定义行为

在这里插入图片描述
在这里插入图片描述

掩码

将源码与掩码经过按位运算或逻辑运算得出新的操作数。其中要用到按位运算如OR运算和AND运算。用于如将ASCII码中大写字母改作小写字母。
如A的ASCII码值为65= (01000001)2,a的ASCII码值为97=(01100001)2,要想把大写字母A转化为小写字母只需要将A的ASCII码与(00100000)2进行或运算就可以得到小写字母a。
在这里插入图片描述
1表示通电,0表示断开
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值