/*
按位或运算符(|):
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);
}
|
|