详解位移运算符

 时间:2024-11-02 04:36:54

详细讲解位移运算符如何使用

工具/原料

电脑

c/c++/java等等

方法/步骤

1、位操作可分为 左移操作符(<<)、“有符号”右移操作符(>>)、“无符号”右移操操作符(>>>)三种。

2、左移操作符(<<):value<<numv瞢铍库祢alue指定移动的值荏鱿胫协num指定移动的位数运算规则:按照操作符右侧指定的位数将左边的操作数向左边移动(高位移除,在低位补0);eg:二进制十进制00001001---->99<<100010010----->18(去掉最高位,在最低位补个0,数学意义上也就是下面数学意义的第一点)当左移的操作数是int类型时,每移动一位它的第31位就要被移除(位数以第0位开始);当左移的操作数是long类型时,每移动一位它的第63位就要被移除;当左边的操作数为byte、short类型时,它们会被转换为int类型,其结果要是int类型。在左移过程中正数可能移为负数,负数也可能移为正数。数学意义:在没有数字溢出的前提下,左移1位相当于乘以2的1次方,左移n位相当于乘以2的n次方。例:这里以-101(int类型)为例,负数在计算机内是以补码形式存储的,因此移位操作时也是在补码的基础上移位-101在计算机内的存储源码10000000000000000000000001100101反码11111111111111111111111110011010补码11111111111111111111111110011011由补码可知,当向左移动到2229位时-101变为正数,以下用程序来说明:图一结果:图二

详解位移运算符

详解位移运算符

3、“有符号”右移操作符(&g隋茚粟胫t;>):value>>numvalue指定移动的值num指定移动的位数运算规则:按阖嚏逵藩照操作符右侧指定的位数将操作符左边的操作数向右移动(采用符号扩展机制);符号扩展进行移位,即:若符号为正,则在高位插入0,若符号为负,则在高位插入1(符号位保持不变);当左边的操作数为byte、short类型时,它们会被转换为int类型,其结果要是int类型。数学意义:右移一位相当于除以2,右移n位相当于除以2的n次方。例:-101(int类型32位)-101右移2位内存分析源码1000,00000000,00000000,00000110,0101取反----->反码1111,11111111,11111111,11111001,1010加1----->补码1111,11111111,11111111,11111001,1011>>2----->移位后补码1111,11111111,11111111,11111110,0110减1----->反码1111,11111111,11111111,11111110,0101取反----->源码1000,00000000,00000000,00000001,1010十进制为:-26值得注意的是:无论正负偶数右移一位直接是整除结果,但对于正值奇数结果是除以2后向下取整后的结果。对于负值奇数结果是除以2后向上取整结果。如下表:正数负数偶数(60)直接除以2(30)直接除以2(-30)奇数(61)除以2后向下取整(30)除以2后向上取整(-31)“无符号”右移操作符(>>>)value>>>numvalue指定移动的值num指定移动的位数运算规则:按照操作符右侧指定的位数将操作符左边的操作数向右移动(0扩展机制);移位过程中,无论数值是正数还是负数,都在最高位补0只对32位和64位值有意义在Thinkinginjava中有这么一句话:只有数值右端的低5位才有用,这样可以防止我们移位超过int型值所具有的位数。(因为2的5次方为32,而int类型只有32位)若对一个long类型的数值进行处理,最后得到的结果也是long类型,此时只会用到数值右端的低6位,以防止移位超过long型数值具有的位数换言之,如果移动位数超过该类型的最大位数,那么编译器会对移动的位数取模。例如果对int类型移位33位,实际上只移动了33%32=1位。具体细节是(inta<<b)如果移位超过数值类型的最大位数,就将b化为二进制数,取右端的低5位数,再把这5位数化为10进制,此时这个10进制就是要将a移动的位数,long类型同理。注意:移位运算符不存在“无符号”左移这一说。

4、位移运算符适用于很多场景,可以提高运行速率,相比于直接运算,位移运算符大大提高了速率。所以在日常敲代码的时候,可以适当用位移运算符

Visual studio code 打印美丽高颜值的代码 C语言中有 ^ 这个运算符吗 分流分压公式图解? 如何理解离散数学中的全称量词引入规则 c++如何把一个数转换成字符串
热门搜索
周末同床电影 加拿大枫叶图片 灵幻先生电影 情欲电影院 cf邪恶图片