C语言--位操作

位操作

掩码

置1某位:

按位或操作用于打开某一位,同时保持其他位不变。

0x1000第二位置一
0x1000 = 0x1000 | (1<<2));
0x1000 |= (1<<2);

清0某位:

按位与和按位或操作可以组合成关闭某一位,同时保持其他位不变。

0x1000第二位清零
0x1000 = 0x1000 & (~(1<<2));
0x1000 &= ~(1<<2);

&:按位与

按位与运算符(&)通过两个运算对象形成一个值。如果两运算对象中相同号位都为1,那么该值中对应的位为1;否则,该位为0。

|:按位或

按位或运算符(|)同样通过两个运算对象形成一个值。如果两运算对象中相同号位有一个为1或都为1,那么该值中对应的位为1;否则,该位为0。

~:按位取反

~运算符将其运算对象的每一位取反,将1转为0,0转为1。

^:按位异或

按位异或运算符(^)也有类似的操作,只有两运算对象中相同号位有一个为1时,结果值中对应的位才为1。
相同为0,不同为1。

真值 原码 反码 补码

在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。
正整数的原码,反码,补码都相同,符号位为0,其他数值相同。
负整数的原码,反码,补码,需要先求原码,再求反码,最后求补码。

真值

就是现实中的数字(二进制)必须有+/-,实际中整数舍弃了+。

原码

计算机中唯一标识一个真值,但是不能用于计算以及无法实现减法,会产生二异性(+0,-0)

求法:正数的原码是其补全位数后前面加0,负数的原码是是其补齐位数后去掉-,在前面加1

反码

正数的反码是其本身。
负数的反码是其原码的基础上,符号位不变,其余位取反。

补码

正数的补码是其本身。
负数的补码是其原码的基础上,符号位不变,其余位取反,最后加1。(在其反码的基础上+1)

将补码最高位符号位变为数据有效位

data为24位数据,异或0x800000,会将最高位变为数据有效位。
当data=0x800000时:
0 = 800000 ^ 0x800000
当data=0x7FFFFF时:
FFFFFF = 7FFFFF ^ 0x800000
经过异或运算,就将data的变化范围由(0x800000 - 0x7FFFFFF)转变为了(0 - 0xFFFFFF)

进制转换

位:1bit
字节:1byte = 8bit
半字:半字 = 2byte = 16bit
字:字 = 4byte = 32bit
2进制:逢二进一
8进制:逢八进一
10进制:逢十进一
16进制:逢十六进一

移位运算符

左移 <<

左移相当于乘以2的n次幂

右移 >>

如果变量不为负数,右移相当于除以2的n次幂

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Paper_Love

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值