位运算

来源:互联网 发布:jxl导入excel到数据库 编辑:程序博客网 时间:2024/05/21 22:22
原来电脑只会二进制O(∩_∩)O哈!
这节课视频有点长,80分钟,可能是我感觉知识点都挺多的吧,也不能算多,就是可能我理解的不太好,然后我变写代码边有着疑问去做视频,嘿嘿,把出现问题来如何解决的过程呈现出来,这样会更加知道以后自己出现新问题的解决方法!
下面是简单的介绍了下进制:
1.十进制:                0,1,2,3,4,5,6,7,8,9

                到10进一

                1 + 9 = 10

2.八进制:
                0,1,2,3,4,5,6,7

                到8进一

                7 + 1 = 10

3.二进制:
               0,1

                到2进一

                1 + 1 = 10

4.十六进制:
                0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F

                到16进一

                F + 1 = 10

.................还有许多进制,例如:3,4,5,6,7,9,11,12,13,14,15,17,18,19,20,60,120,。。。进制的
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
例如:十进制
                                1212120 = 1 * 10^6 + 2 * 10^5 + 1 * 10^4 + 2 * 10^3 + 1 * 10^2 + 2 * 10^1 + 0 * 10^0

                                权:10^6,10^5,10^4,10^3,10^2,10^1,10^0

           八进制

                                1212120 =  1 * 8^6 + 2 * 8^5 + 1 * 8^4 + 2 * 8^3 + 1 * 8^2 + 2 * 8^1 + 0 * 8^0

                                权:8^6,8^5,8^4,8^3,8^2,8^1,8^0
            二进制

                               1011011 = 1 * 2^6 + 0 * 2^5 + 1 * 2^4 +1 * 2^3 + 0 * 2^2 + 1* 2^1 + 1 * 2^0

                                权: 2^6,2^5,2^4,2^3,2^2,2^1,2^0
.........进制的都是一样的,都是有规律可循的
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
例如:
        十进制

                           2345.123 = 2 * 10^3 + 3 * 10^2 + 4 * 10^1 + 5 * 10^0 + <这里注意了>1 * 10^-1 + 2 * 10^-2 + 3 * 10^-3



        二进制             1101.111 = 1 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1 * 2^0 + <这里注意了>1 * 2^-1 + 1 * 2^-2 + 1 * 2^-3

其他进制也都是一样           的.....////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
这是讲解位运算时候出现的符号以及简便方法:
&(位)与|(位)或
~(位)取反

^(位)异或
<<左移  
>>右移
左移一次增大2倍,右移一次减少2倍
全部都是2进制!!
添加:x = x|..
去除:x = x &~..

代码我就贴到下面了自己观看写一遍吧!:
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
代码1:
#include <stdio.h>
#include <stdlib.h>


int main()
{
        int a, b, c;
        int d, e, f;
        a = 12;                        //00000000000000000000000000001100
        b = 14;                        //00000000000000000000000000001110
        c = a & b;                //00000000000000000000000000001100
        printf("%d\n", c);//12  //1100


        c = a | b;                //00000000000000000000000000001110
        printf("%d\n", c);//14  //1110


        d = 100; //1100100  -->00000000000000000000000001100100
        e = ~d;  //0011011        -->原码:11111111111111111111111110011011
                                        //        -->反码:10000000000000000000000001100100
                                        //  -->补码:10000000000000000000000001100101
        printf("%d\n", e);//-101 //10000000000000000000000001100101


        f = 33^44;                //33:000000000000000000000000000100001
                                        //44:000000000000000000000000000101100
                                        //         000000000000000000000000000001101
        printf("%d\n", f);//13




        system("pause");
        return 0;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
代码2:
#include <stdio.h>
#include <stdlib.h>


int main()
{
        int a;
        int b;
        a = 13;                       //http://www.bcwhy.com/thread-21592-1-1.html        //0000 0000 0000 0000 0000 0000 0000 1101
        b = a<<1;                                //0000 0000 0000 0000 0000 0000 0001 1010
        printf("%d\n", b);        //26


        b = 15;                                //0000 0000 0000 0000 0000 0000 0000 1111
        a = b>>2;                        //  00 0000 0000 0000 0000 0000 0000 0011   //a+1  printf("%d\n", a);
        printf("%d\n", a);//3


        system("pause");
        return 0;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
代码3:
/*
*0000 0000 0000 0000 0000 0000 1111 1011
*得到右边第4个数的值的头3个数值  11 1
*
*/


#include <stdio.h>
#include <stdlib.h>


unsigned Set(unsigned a, int p, int x) 
{
        //return a >> (p + 1 - x)&(~0 >> x); //|(0 >> x)
        return a >> (p + 1 - x) | (0 >> x); 
}




int main()
{
        unsigned int a;
        a = 251;                        //0000 0000 0000 0000 0000 0000 1111 1011
                                                //                                                                  11 1
                                                //0000 0000 0000 0000 0000 0000 0000 0000
                                                //1111 1111 1111 1111 1111 1111 1111 1
        printf("%d\n", Set(a, 5, 3));//31


        system("pause");
        return 0;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
代码4:
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>


#define  小开关 1   // 0x1//0000 0000 0000 0000 0000 0000 0000 0001
#define         大开关 2        //0x2// 0000 0000 0000 0000 0000 0000 0000 0010
#define         密码开关 3 //0x3// 0000 0000 0000 0000 0000 0000 0000 0011
#define  主人开关 4 //0x4// 0000 0000 0000 0000 0000 0000 0000 0100


int main()
{
        int 开关 = 0;
        开关 = 开关 | 小开关;
        开关 = 开关 | 大开关;
        开关 = 开关 | 密码开关;
        开关 = 开关 | 主人开关;
        printf("%d\n", 开关); //7 //0000 0000 0000 0000 0000 0000 0000 0111


        开关 = 开关 & ~小开关;
        printf("%d\n", 开关); //6


        MessageBoxA(NULL, "hello", "11111", 256|MB_ICONINFORMATION);


        system("pause");
        return 0;
}

end!
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
学习需要努力,努力再努力---》写代码!!
视频地址
http://www.bcwhy.com/thread-21592-1-1.html
0 0
原创粉丝点击