/*
取反运算符(~):
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;
*/
|
|