黑马程序员技术交流社区

标题: 位运算符是啥 [打印本页]

作者: dandan520    时间: 2014-12-15 23:02
标题: 位运算符是啥
位运算符有谁懂的,请大神讲解
作者: 7788665544    时间: 2014-12-15 23:10
同求。。
作者: 不给吃鸭梨    时间: 2014-12-15 23:14
建议要看下基础的关于运算符的东西了。

作者: 取名回忆的时光    时间: 2014-12-15 23:25
位运算大致就是将其转化为二进制后,进行左(右)位数的移动,不够的补0
作者: Bali    时间: 2014-12-15 23:42
二进制中左右位移的过程,主要是填0的过程
作者: 青衫禅客    时间: 2014-12-15 23:50
有两种:无符号位移和有符号位移,老毕视频上说的很清楚啊
作者: 极光_CDY    时间: 2014-12-16 16:45
        简而言之:因为数据在计算机中的存储方式是二进制的,而8个位构成一个字节。当我们现实生活中所接触的字符还是数字,我们如果理解了它在计算机中的存储方式,就可以直接在位上对其操作。说两点:
      1,当我们想计算5*8时,我们可以写     sum=5*8;      但采用位运算    sum=5<<3;   可以取得更高的效率。
      2,我们用^运算符,可以实现对数据的加密,5^9      0000 0101
                                                                               0000 1001
                                                                       结果  0000 1100         12
                                                                 再  ^9     0000 1001
                                                                               0000 0101           5
所以,底层的位操作明白了,理解一些运算,加密就明白了。希望对你有用。



作者: 清诗纪事    时间: 2014-12-16 18:34
位运算符有与& | ^ ~ << >> >>>依次是与、或、抑或、按位取反,左移,右移。主要是用来对二进制位进行操作的,>>和>>都是右移运算符,差别就是>>>不论是负数还是正数右移后都是在最高为补0,而>>如果是正数右移后在最高为补0,负数则补1
作者: zw937820438    时间: 2014-12-16 21:28
位运算符:
&: 3&4 = 0;
计算方式:(&有假则假,1代表真,0代表假,就是有0则0);
00000011
00000100
-----------
00000000
|:3|4 = 7;
计算方式:(|有真则真,1代表真,0代表假,就是有1则1);
00000011
00000100
---------
00000111
^: 3^4: = 7;(在位运算中与|同理)
00000011
00000100
-----------
00000111
~:~-7 = 6;(连符号位在内,把得到的补码取反);
        10000111        -7的原码
        11111000        -7的反码
        00000001               
    ~        11111001        -7的补码
        ----------
        00000110        6
<<:空位补0,被移除的高位丢弃(左移运算,相当于乘法运算)
举例:
4<<2;(4X2^2)=16;
        000000100        4
     00        000010000        16
>>:被移位的二进制最高位是0,右移后,空缺位补0;
最高位是1,最高位补1。(右移运算相当于除法运算)
举例:
4>>2;(4/2^2)=1;
        000000100        4
        000000001 00        1
>>>:
-7>>>2;被移位二进制最高位无论是0或者是1,空缺位都用0补。
        10000000 00000000 00000000 00000111        -7
        11111111 11111111 11111111 11111000        -7的反码
+        00000000 00000000 00000000 00000001
---------------------------------------------
        00111111 11111111 11111111 11111110 01


作者: kenhe    时间: 2014-12-16 21:35
位运算  是针对二进制的
位运算符:
&:按位与
|:按位或
^:异或
~:取反
<<:左移
>>:右移
>>>:无符号右移
作者: 擒贼先擒王    时间: 2014-12-16 21:40
位运算符不是重点,平时用的也不多,了解就行!
作者: yl82846094    时间: 2014-12-16 21:41
来学习学习!
作者: Mydream524    时间: 2014-12-18 06:44
Bali 发表于 2014-12-15 23:42
二进制中左右位移的过程,主要是填0的过程

这个有点吊,
回归正题位运算符包括了
&:按位与
|:按位或
^:异或
~:取反
<<:左移
>>:右移
>>>:无符号右移

其中的难点就是当数据在计算内部进行计算时  是以该数据的二进制补码进行的。
作者: 小马范    时间: 2014-12-18 08:39
好好看视频吧, 这是哪技术分来的吧,哈哈
作者: zzy1990    时间: 2014-12-18 09:34
进来学习学习
作者: dwy_hm    时间: 2014-12-18 21:52
位运算操作的是二进制数据
作者: woshihuoye    时间: 2014-12-18 22:23
我刚好看到,位运算符主要是操作二进制位的。方法上面的哥们说的很清楚了、
左移<<
右移>>
无符号右移>>>
与&
或 |
异或 ^
取反 ~
首先你的明白什么是二进制,10两个数表示的东西,然后1一个字节8个1或者0的数,4个字节的二进制数即32个1和0组成的数用这些位运算符号操作。搞明白这几个符号的意思,那么你就可以用他们操作这32个1或0组成的数字。比如说2进制转换成8进制,16进制,比运算节约空间有效率。也可以把两个数的数值交换。掌握好这些位运算符,那么就相当于加减乘除的算法,运用到自己以后的开发中。
总之,在搞明白变量,常量后,可以学习各种运算符,包括算术运算符,赋值运算符,比较运算符,逻辑运算符,位运算符和三元运算符。位运算符只是其中的一种
作者: HiloFeng    时间: 2014-12-18 22:36
对应数的  二进制左移右移,负数要变成补码移动
作者: 7788665544    时间: 2014-12-18 22:41
位运算符是对二进制数进行操作的运算符,计算机中的int类型等都是以补码的形式存在,计算也是操作他们的补码。好象是这样吧。
作者: 赵越海    时间: 2014-12-18 22:46
本帖最后由 赵越海 于 2016-7-8 17:38 编辑

         .
作者: shuoshuo    时间: 2014-12-19 00:01
位运算符有与& | ^ ~ << >> >>>依次是与、或、抑或、按位取反,左移,右移
作者: x277402301t    时间: 2014-12-19 00:41
这么多,建议看毕老师的视频,慢慢理解!
作者: 960943877    时间: 2014-12-19 01:03
左移,右移,无符号右移。
作者: 960943877    时间: 2014-12-19 01:11
左移,右移,无符号右移。位运算符--针对二进制的运算。         & 按位与            | 按位或          ^ 按位异或 :一个数对同一个数据^两次,结果还是这个数。         两个数的互换         a = a ^ b;         b = a ^ b;//a ^ b ^ b = a         a = a ^ b;//a ^ b ^ a = b         ~ 按位取反  原码  反码  补码               左移:向左移动几位就乘以2的几次幂,空位补零。         右移:向右移动几位就除以2的几次幂,最高位是什么补什么。         无符号右移:向右移动几位就除以2的几次幂,最高位不管是什么都补零。
作者: 冷风    时间: 2014-12-19 21:54
不是有视频吗,视频这一块讲的挺简单的。
作者: 黑马-李权88    时间: 2014-12-19 23:38
我来回答一下好了,说一个特性,一个数据对同一数据位运算两次,数据不变,借此可以用来交换两个数据,且不需要第三个变量;
a = a^b
b = a^b
a = a^b
就这样交换了a,b的值,面试的时候这样回答装下大神。
我很认真回答的了,纯手打




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2