移位运算符怎么移的,C语言移位运算符怎么用?

2020-11-25 14:12:21 字数 5322 阅读 1357

1楼:

bytemask=intmax<<8;

intmax 按2进制向左移动 2进制八位,右边补0,左边高位溢出丢弃

intmax=4294967195;16进制 0xffffff9b左移2进制八位, 就是左移16进制2位, 16进制 0xffff9b00

打印出的10进制就不太容易看。

左移1位实际上等于 乘2,左移8位就是 乘了 8 次 2。

高位溢出丢弃,丢弃多少,要看你的 uint 是几位的。

请教java的移位运算符的方法

2楼:

11010011 << 1

表示所有位居向前移一位,原有的符号保留,如果是正数还是正数,负数还是复数。位移以后的数为:10100110,由于在向前移的过程中,原来的第一位超出了范围,所以将被舍弃,原来的最后一位向前移以后,不足的位数用0填充。

11010011 >> 1

移完以后的结果为01101001.每个位上的数字均向右移一位,不足的位用0填充,原来最后一位1将被舍弃。

而<<< 和 >>>都表示无符号位移,-11010011 将按照《和》的规则进行位移,但是无论是<<< 还是 >>>,都表示得出的最终结果是没有符号的,也就是这样位移出来的结果都是正数。;利用这个特性,在一些需要取随机正整数的地方或者其他需要忽略符号以及需要将负数通过位移变为正数的计算中,可以利用这个特性方便快捷的得出计算结果。

简单的讲,《表示2的整数倍的乘积计算。比如,1 << 3 = 1 * (2 * 2 * 2) = 8 , 1 << 1 * (2 * 2 * 2 * 2) = 16,

>>表示2的整数倍的除运算

16 >> 4 = 16 / (2 * 2 * 2 * 2) = 1,

16 >> 3 = 16 / (2 * 2 * 2) = 2,

16 >> 2 = 16 / (2 * 2) = 4,

16 >> 1 = 16 / (2) = 8,

但是大部分的数字都不是2的整数倍的,比如17在位移的时候,得出的结果与16是一样的,因为位移的结果没有小数,即使是8.999999,也将被取整为8.

最终结果(楼主没有说明位移几位,例子就以位移一位和2位为主)

11010011 << 1 10100110

11010011 << 2 01001100

-11010011 << 1 -10100110

-11010011 << 2 -01001100

11010011 >> 1 01101001

11010011 >> 2 00110100

-11010011 >> 1 -01101001

-11010011 >> 2 -00110100

11010011 <<< 1 10100110

11010011 <<< 2 01001100

-11010011 <<< 1 10100110

-11010011 <<< 2 01001100

11010011 >>> 1 01101001

11010011 >>> 2 00110100

-11010011 >>> 1 01101001

-11010011 >>> 2 00110100

3楼:最新资讯资料

学习java本来就是一件日积月累的事情,或许你通过自学能掌握一些皮毛技术,通过java学习机构学到java的一些基本大面,但想要做到精通,还是需要自己技术的日积月累和工作经验的不断积累。

今天给大家分享的技术知识是:java中的位移运算符!

1) “有符号”左移位运算符(<<)能将运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补0)。

左移移位相当于乘以2,例如

3 << 2 //12 则是将数字3左移2位 3*2*2 = 3*(2的2次方)

分析:首先把3转换为二进制数字0000 0000 0000 0000 0000 0000 0000 0011,然后把该数字高位(左侧)的两个零移出,其他的数字都朝左平移2位,最后在低位(右侧)的两个空位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 1100,则转换为十进制是12.

数学意义:

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

2) “有符号”右移位运算符(>>)则将运算符左边的运算对象向右移动运算符右侧指定的位数。 “有符号”右移位运算符使用了“符号扩展”:若值为正,则在高位插入0;若值为负,则在高位插入1。

>>运算规则:按二进制形式把所有的数字向右移动对应位数,低位移出(舍弃),高位的空位补符号位,移位后得到的数字为正数则补0,负数补1。

例如11 >> 2,则是将数字11右移2位

分析:11的二进制形式为:0000 0000 0000 0000 0000 0000 0000 1011,然后把低位的最后两个数字移出,因为该数字是正数,所以在高位补零。

则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 0010.转换为十进制是3.数学意义:

右移一位相当于除2,右移n位相当于除以2的n次方。

3) java也添加了一种“无符号”右移位运算符(>>>),它使用了“零扩展”:无论正负,都在高位插入0

4)右移一位相当于除以2,左移一位(在不溢出的情况下)相当于乘以2;移位运算速度高于乘除运算。

5)位运算符的优先级

~的优先级最高,其次是<<、>>和》,再次是&,然后是^,优先级最低的是|。

c语言移位运算符怎么用?

4楼:匿名用户

这是c++好吧。。。。算了c和c++的移位运算符都一样

这个难道不对吗,左移就是*2啊(不越界的话)

原理就是你把1110化成二进制(000010001010110),然后每个位都向左移一位,最低位补0,次高位舍弃(最高位是符号位,不能动)

5楼:匿名用户

x<<=1 相当于乘以2; 假如 x=8,对二进制来说就是00001000,<<1 就是左移一位,移完之后是00010000,换成十进制就是16。相当于乘以2。<<2 就是乘以4。

<<3 就是8.

6楼:荆耕顺隆词

|一.位逻辑运算符1.~

按位取反

将1变为0,将0变为1

eg:~(10011010)

(01100101)2.&

按位取与

只有两个操作数都是1结果才是1,否则为010=

00000000

00000000

00000000

0000101012=

00000000

00000000

00000000

00001100&8

=00000000

00000000

00000000

000010003.|

按位取或

两个操作数任意一位为1结果就是110=

00000000

00000000

00000000

0000101012=

00000000

00000000

00000000

00001100|14

=00000000

00000000

00000000

000011104.^

按位异或

两个操作数不同为1,相同为010=

00000000

00000000

00000000

0000101012=

00000000

00000000

00000000

00001100^14

=00000000

00000000

00000000

00000110

5.用法:掩码

掩码是通过&(位与)将某些位设置为开(1),将某些位设置为关(0)。将掩码0看做不透明,将1看着透明。

6.用法:打开位

打开位是通过

|(位或)打开一个值的特定位,同时保持其他位的不变。这是因为和0位或都为0,和1位或都为1。

7.用法:关闭位

关闭某些位。

8.用法:转置位

如果一位为1则转置为0,如果一位为1则转置为0

二.移位运算符

<<左移左移运算符是把操作数的值的每一位向左移动,移动的位数有右边的操作数决定,右侧空出的位数用0填充

>>右移右移运算符是把操作数的值的每一位向右移动,移动的位数有右边的操作数决定,左边丢弃的位数用0填充

一、传统的c方式位操作:

1.基本操作:

使用一个unsigned

int变量来作为位容器。

2.操作符:

|按位或操作符:result=exp1|exp2;当exp1和exp2中对应位中至少有一个为1时,result中对应位为1,否则为0。

&按位与操作符::result=exp1&exp2;当exp1和exp2中对应位全为1时,result中对应位为1,否则为0。

^按位异或或操作符:result=exp1^exp2;当exp1和exp2中对应位不相同时,result中对应位为1,否则为0。

~反转操作符:将位容器中的所有位都反转,1变为0,0变为1。

<<按位左移操作符:exp<

>按位右移操作符:exp>>n,将容器中所有的位向右移n位,空出的位用0填充。

|=,&=,^=

分别对应|&^三种操作符的复合操作符。

3.常用操作

这里我们假设有一个result的unsigned

int变量用来储存32个学生的成绩(通过和不通过分别用0和1),这样result就有33位(result从右至左,从0开始计算位数,在这个例子中0位被浪费)。

(a)将第27位设置为及格(设作1)其他位不变:

result|=(1<<27)

//任意的位值与1作按位或操作其值为1,而与0作按位与操作其值不变

(b)将第27位设置成不及格(设为0)。

result&=~(1<<27)

//任意的位值与0作按位与操作其值为0,而与1作按位与操作其值不变

(c)反转第27位的值。

result^=(1<<27)

//任意的位值与1作按位异或操作其值为1,而与0作按位异与操作其值不变

C语言位运算里这些怎么用,& | ^ ~ >> <<这些运算符怎么用?

1楼 与鲤 按位与 按位或 按位异或 取反 左移 右移 1 按位与运算。按位与运算符 是双目运算符。 其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。 2 按位或运算。按位或运算符 是双目运算符。 其功能是参与运算的两数各...

请问在c++中是什么运算符,请问c++中的"^"运算符是什么运算符.

1楼 匿名用户 和c是一样的,先对所有的数据转换成二进制, 如果对应位有一个为1,则该位为1, 是两个全为1,则为1,否则为0, 代表两位相同的话则为0,否则为1 则4 6 100 110 110, 5 7 101 111 101 8 9 1000 1001 0001 2楼 傲世修罗王 是位运算符,...

c运算符-与什么等效,C语言的运算符和表达式有哪些

1楼 醒目鸟 1 表示比特位右移。效果与 除以 类似。右移一位即除以2,右移2位即除以4,右移3位即除以8 例如 数字8的二进制码为 00001000 右移一位后变为 00000100。 即00000100 4 2 还有一种含义 在c 里表示堆栈的指针位置。例如 this data 2楼 千锋教育 ...