按位运算c语言,C语言之按位运算符

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

实话说,写了一年多的代码了,从来没有想过要对数据进行按位运算。接触之后发现这跟《数据逻辑》的部分知识结构相吻合,比如与门、或门、非门等。相信学计算机的大家们早已烂透在心底了。我这里做一个记录,方便以后写C的时候查询。

在C语言中,可以单独操控变量中的位。

处理一个值中的位的两个C工具:位运算符和位字段

按位逻辑运算符

二进制反码或按位取反:~

一元运算符~把1变为0,把0变为1。例子如下:1

2

3

4~(10011010)

(01100101) // 结果值

val = ~val;

按位与:&

二元运算符&通过逐位比较两个运算对象,生成一个新值。对于每个位,只有两个运算对象中相应的位都为1时,结果才为1。例子如下:1

2

3

4

5(10010011)&(00111101)

(00010001) // 结果值

val &= 0377;

val = val & 0377;

按位或:|

二元运算符,通过逐位比较两个运算对象,生成一个新值。对于每个位,如果两个运算对象中相应的位为1,结果就为1.1

2

3

4

5(10010011)|(00111101)

(10111111) // 结果值

val |= 0377;

val = val | 0377;

按位异或:^

二位运算符……逐位比较两个运算对象。对于每个位,如果两个运算对象中相应的位一个为1(但不是两个为1),结果为1。1

2

3

4

5(10010011)^(00111101)

(10101110) // 结果值

val ^= 0377;

val = val ^ 0377;

移位运算符

下面介绍C的移位运算符。移位运算符向左或右移动位。

左移:<<

左侧运算对象移出左末端位的值丢失,用0填充空出的位置。1

2(10001010) << 2

(00101000) // 结果值

右移:>>

对于无符号类型,用0填充空出的位置。1

2(10001010) >> 2 // 表达式,无符号值

(00100010) // 所有系统都得到该结果值

对于有符号类型,其结果取决于机器。1

2

3

4(10001010) >> 2 // 表达式,有符号值

(00100010) // 在某些系统中的结果值

(10001010) >> 2 // 表达式,有符号值

(11100010) // 在另一些系统上的结果值

位字段

操控位的第二种方法是位字段。

下面的声明建立一个4个1位的字段:1

2

3

4

5

6struct {

unsigned int autfd : 1;

unsigned int bldfc : 1;

unsigned int undln : 1;

unsigned int itals : 1;

}

这时候就能通过下列语句赋值:1

2prnt.itals = 0;

prnt.undln = 1;

注意需要赋的值不能超过位数所能表示的最大数值,不然会占用下一个unsigned int类型的存储位置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值