黑马程序员技术交流社区

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

作者: wangshengjie    时间: 2015-3-12 09:10
标题: 位运算3
/*
        取反运算符(~):
        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);
}
/*
        一、位运算赋值运算符:位运算符与赋值运算符可以复合成赋值运算符,如:&=,|=,>>=,<<=,^=等;
                例如:a&=b《=》a=a&b;        a<<=2        《=》        a=a<<2;
        二、不同长度数据的位运算
                若两个不同长度的数据进行位运算时,系统会将二者按右端对齐。
                例如:long int a;        int b;
                a&b:若b为正数,则左侧16位补满0;若b为负数,左端补满1;若b为无符号整数型,则左侧补满0;
*/







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