算法技巧类(自用)

一、字符串操作:

        1、大小写切换:

a ^= ' ' : A 

'a' ^ ' '  ->  97 ^ 32 = 65  // 'A'

A ^= ' '  :  a 

'A' ^ ' ' ->  65 ^ 32 = 97  // 'a'

二、按位

2 = 右移1位; 2 = 左移1
4 = 右移2位; 4 = 左移2
8 = 右移3位; 8 = 左移3

1、符号位的处理

  • 左移操作 (<<)

    • 对于负数(符号位为1),左移时符号位依然会保持为1,可能导致结果变得更加负。因此,左移操作可能会使负数越加偏离原有数值。
    • 对于正数(符号位为0),左移操作将所有位向左移动,并在右侧用0填充,可能导致将正数转化为负数。
  • 右移操作 (>>)

    • 对于正数,右移操作将所有位向右移动,并在左侧用0填充。这基本上实现了对正数的整除操作。
    • 对于负数,右移操作通常被称为算术右移,符号位会复制填充到左侧。这保持了负值的符号特性,结果也在原有范围内。
  1. 类型的限制

    • 只有整型数据类型能够进行移位操作,浮点型(如 float、double)和布尔型(bool)不能使用移位操作,因为它们的表示方式不同,不支持位操作。
  2. 操作的效率

    • 移位操作通常比乘法或除法的计算速度快,因此在某些性能要求高的实时应用中,可以被用作加速技巧。
  3. 注意溢出

    • 移位操作可能导致溢出或数据丢失,特别是在左移时,若移出的高位包含有效数据,将导致数据的丢失。这需要特别的小心,以免出现未定义的行为。
  4. 示例

    • x << 1等价于 x * 2 (适用于 x 为整型且为正数)。
    • 1 << n 等价于 2 ^ n
    • x >> 1 等价于 x / 2,但需确保使用整型,以避免意外的浮点结果。

eg、

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值