黑马程序员技术交流社区

标题: 位运算2 [打印本页]

作者: wangshengjie    时间: 2015-3-12 09:09
标题: 位运算2
/*
        按位或运算符(|):
        1、规则:两个相应的二进制位中只要有一个为1,该位的结果值为1。即:0|0=0、0|1=1、1|0=1、1|1=1
        2、用途:利用按位或运算对一个数据的某些位定值为1.
       
                                 00110000(八进制060)
                        (|)00001111(八进制017)
                         ———————
                             00111111
*/
/*
        按位异或运算符(^)
        1、规则:若参加运算的两个二进制位同号,则结果值为0(假);异号则为1(真);即0^0=0、0^1=1、1^0=1、1^1=0
        2、用途:
        (1)使特定位翻转
                例如:将01111010的低4位翻转,与00001111进行^运算:
                                0 1 1 1 1 0 1 0
                   (^)0 0 0 0 1 1 1 1
                        ————————————
                                0 1 1 1 0 0 1 0 1
        (2)与0相^,保留原值


        (3)交换两个值,不用临时变量(a^a=0,a^0=a)
                例如:        a=3,b=4
                                a=a^b;
                                b=b^a; //b=b^(a^b)=b^a^b=a^b^b=a^0=a
                                a=a^b;
*/

/*
        取反运算符(~):
        1、规则:~是一个单目运算符,用来对一个二进制数按位取反,即将0变1,1变0.
        (~运算符的优先级比算术运算符、关系运算符、逻辑运算符和其他运算符都高)
        2、用途:将某个整数a的最低位变为0
                >将一个16位整数a的最低位变成0,可以用a&0177776
                        0177776为二进制1111 1111 1111 1110
                >若将C源程序移植到以32位存放一个整数的计算机系统(VAX 11/780)上,由于一个整数用4个字节(32位),
                 想将最后一位变成0就不能用a&0177776;
                >若为了适应32位的计算机系统,改为a&037777777776,但是这样移植性差;
                >将某个整数a的最低位变为0,可以使用a=a&(~1),它对以16位和32位存放整数的情况都适用,不必作修改。
                 因为当以0个字节存储一个整数时,1的二进制形式为0000 0000 0000 0001,~1是1111 1111 1111 1110.
                 当以4个字节存储一个整数时,~1为1111 1111 1111 1111 1111 1111 1111 1110。
*/

#include<stdio.h>

void main()
{
        //int a = 075;
        //int b = 0177776;

         int a = 017776543603;
         int b = 0177776;
         int c = a&b;

        printf("%o\n", c);
}







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