linux c 字符串异或,linux c按位运算符

linux c按位运算符

按位取反:~

0变成1,1变成0。

按位与:&

两边都为1的为1,其他为0。

按位或:|

只要有一方为1的就为1,其他为0。

按位异或:^

一方为0,一方为1的为1,其他为0

例子#include

typedef unsigned char u_char;

void main()

{

u_char c;

u_char a = 3; //00000011

u_char b = 100; //01100100

c = ~a; //11111100即252

printf("%d\n", c); //252

c = a & b; //00000000

printf("%d\n", c); //0

c = a | b; //01100111即103

printf("%d\n", c); //103

c = a ^ b; //01100111即103

printf("%d\n", c); //103

}

下面由例子看一次实际应用场景#include

typedef unsigned char u_char;

void main()

{

u_char res;

u_char f = 202; //11001010

u_char mask = 2; //00000010

res = f & mask; //只让第1位显示

//打开设置位

res = f | mask; //开启1位(第1位必定为1)

//关闭位

res = f & ~mask; //也就是与11111101与,第1位必定关闭

//切换位

//假设我们想把最后3位切换,则mask可以设置为11100000(只需把想切换的为设为1)

//运算一次切换一次

mask = 224; //11100000

res = f ^ mask; //00101010

//判断位是否为1

//比如想判断第1位是否为1,则可以吧mask设置为00000010

mask = 2; //00000010

if((f & mask) == mask){

printf("已开启\n");

}

}

左移运算符:<<

左侧的值向左移动,移出左端的值丢失,用0填充右边空出来的位置。

右移运算符:>>

右侧的值向右移动,移出右端的值丢失,无符号的类型用0来填充左边空出来的位置,有符号的根据操作系统来决定用1或0来填充。#include

typedef unsigned char u_char;

void main()

{

u_char res;

//无符号

u_char f = 185; //10111001

res = f << 2;

printf("%d\n", res);//228 11100100

res = f >> 2;

printf("%d\n", res);//46 00101110

//有符号

char g = 185; //10111001

res = g >> 2;

printf("%d\n", res);//238 11101110

}

实际应用:

1.number << n    number乘以2的n次幂

2.number >> n    如果number为非负,则为number除以2的n次幂

3.也可以用来提取部分的位#include

typedef unsigned char u_char;

typedef unsigned int u_int;

void main()

{

u_int s = 0xa; //10

//相当于s*2^4

s = s << 4;

printf("%d\n", s); //160

//相当于s/(2^2)

s = s >> 2;

printf("%d\n", s); //40

//提取部分位

u_char mask = 0xff; //11111111

u_int rgb = 0x00bbccdd;

u_char blue = rgb & mask;

u_char green = (rgb >> 8) & mask;

u_char red = (rgb >> 16) & mask;

//dd cc bb

printf("%x %x %x\n", blue, green, red);

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值