分享

位运算:按位与 &

 昵称6056135 2011-09-13
位运算:按位与 &

二进制位,只有0和1两个数字组成

在计算机中就把它作为数据的基本单位‘位’(bit),然后再把八个这样的位组成一个字节(byte),如 1000,1111.
二进制1111,1111转换为十进制,为255,于是可知1字节的表示范围是0(0000,0000)到 255

在计算机中是这样规定的,用一个数的最高一位表示正负,0为正,1为负.如0111,1111转换为十进制为127,1111,1111为-127,由此我们知一字节的范围为-127到127,其他字节的范围类推. 这是原码表示法

在计算机中的数据都是以补码存放的,只有这样才能减轻cpu的负担.提到补码,就不得不提反码了.计算机中是这样规定反码的,如果是正数,则按原码形式不变,如127仍为0111,1111;而如果为负数则,第一位为1,其他各位取反(即0变为1,1变为0),如原码-127(1111,1111),表示为1000,0000.        

正数的原码反码补码都按按原码形式不变,如127 补码仍为:0111 1111    负数则在反码上加上1得补码  如-127的补码为:1000 0001

1000,0000比较特殊,用它来表示-128,知补码可表示的范围是-128--127。

正数的原码、反码、补码 都等于 原码
负的原码即为它绝对值的原码,  反码即 同位取反, 补码即反码+1

按位与,说起来简单 :两数的 二进制,同位为1,即为1,否则为0
                        1.两个正数:5 和9     
                           5的补码:0000 0101                

                           9          :0000 1001                              

                           按位与 :0000 0001      该值为1  (正数的补码,原码还是它,得到值为1)  
                        2.一正一负:5     -9

                      -9的原码:1000 1001

                      -9的反码:1111 0110

                      -9的反码加上1得补码:1111 0111

                                           5的补码:0000 0101

                                           按位与 :0000 0101       该值为5 (正数的补码,原码还是它,得到值为5)  

                       3.  两负数:  -5  -9

-5的原码:                                                                   1000 0101      

          取反码时:第1位为1 不变, 其他各位取反        1111 1010

                                 加1得到补码为:                         1111 1011

-9的原码:                                                                   1000 1001       

                取反码为:                                                   1111 0110

                                加1得到补码为:                          1111 0111

               1111 1011            -5的补码

               1111 0111            -9的补码

按位与 :1111 0011          该数为负数 的补码,

该负数原码 =     补码-1 再取反码  

   减1后:1111 0010

  取反:   1000 1101

                                    总的说:以补码进行位运算 ,最后得到的是补码值,如高位为0,表示正数,那它的原码也不变,直接转换成10进制,即是我们想求的值;如高位为1,表示负数,那还要用该补码值减1后取反码 得到 负数的原码值 ,再转成十进制.......                 

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多