位运算技巧第一篇

本文深入探讨位运算,包括位操作基础、原码、反码和补码的概念,以及位运算在判断奇偶数、交换数值、变换符号、求绝对值等场景的实用技巧。通过实例讲解了位运算在高低位交换、二进制逆序等问题上的高级应用,助你提升编程效率。
摘要由CSDN通过智能技术生成

1、概述

在计算机中,所有的数据都是以二进制方式存储的。位运算就是对内存中的二进制数据进行操作,因此处理数据的速度非常快。如果在实际的编程过程中,能够巧用位运算,能够达到四两拨千斤的效果。下面就对位操作进行一下总结,示例代码为C++。

2、位操作基础

基本的位操作有与、或、异或、取反、左移、右移这六种,他们的运算规则如下:
在这里插入图片描述
注意以下几点:
1、只有~(取反)操作是单目运算符,其它5种都是双目运算符。
2、位操作只能用于“整形”数据,对 float 和 double 类型进行位操作,编译器会报错。
3、算术右移就是右移之后的填充位使用符号位数据。java中为了区分算术右移和逻辑右移,使用了明确的定义。x >> k 会将x算术右移k个位置,x >>> k 会对 x 做逻辑右移。
4、位操作的运算优先级比较低,因此尽量使用括号来确保运算顺序。如:int a = 1 << i + 1;程序会先执行 i+1,在执行 左移操作。

3、原码、反码、补码

原码:符号位 + 绝对值的二进制。
反码:正数的反码是其本身。负数的反码是在原码的基础上,符号位不变,其余位取反。
补码:正数的补码是其本身。负数的补码是其 反码+1
举例:
在这里插入图片描述
计算机中正数用原码表示,负数用补码表示。其实也可以说成所有的数都是用补码的形式存储的。如: 9 计算机存储为 0000 1001,-9计算机存储为 1111 0111。

注意:1000 0000 = -128。而不是所谓的-0,没有-0一说,所以int的取值范围为 - 2 31 2^{31} 2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值