移位运算符的数学应用

移位运算符(Shift Operators),单从名字就能看出它的含义。

而且,它还有另一个名字——“位移运算符”,进一步展示出它喷薄欲出的味道。

是的,它的功能就是移动数字的位置。

移位运算符是位操作运算符的一种,用于对二进制的数字进行平移。

1.运算规则

左移<<按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。右移>>同理,区别在于左侧可能用符号位填充(对于带符号整数)或用0填充(对于无符号整数)。

2.数学意义

对于正数和负数,左移n位就相当于乘以2的n次方(在数字没有溢出的前提下)。

例如,整数 x = 4(在二进制中表示为 100),对它执行 x << 1,x的值将变为 8(在二进制中表示为 1000)。

#include <stdio.h>  
int main() {  
    unsigned int x = 4; // 4 在二进制中是 100  
    x = x << 1;         // 现在 x 变成 8,在二进制中是 1000  
    printf("The value of x after left shift is: %u\n", x); // 输出: 8  
    return 0;  
}

相反,右移n位相当于除以2的n次方(忽略余数)。

3.最大移动位数

规定实际移动的次数是移动次数和32的余数,也就是移位33次和移位1次得到的结果相同。移动long型的数值时,规定实际移动的次数是移动次数和64的余数,也就是 移动66次和移动2次得到的结果相同。

如果你左移一个无符号整数,并且移动的位数超过了该整数类型可以表示的位数,那么结果将是未定义的(在大多数情况下,这会导致“环绕”行为,即最高位被丢弃,最低位被新位填充)。如果你左移一个有符号整数,并且移动的位数超过了该整数类型可以表示的位数减1(因为符号位通常占用一位),那么结果也是未定义的。在实际编程中,应该避免这种情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

金创想

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

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

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

打赏作者

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

抵扣说明:

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

余额充值