//实例:
#include
int main()
{
printf("%d\n" , a ++ ); // 3 --》 4 // 由于++ 符号在操作数的右边,因此先取值,然后再自加
printf("%d\n" , a ); // 4 由于上一条代码已经 把a 从 3 自加到 4 因此输出4
printf("%d\n" , ++a ); // 5 由于 ++ 在a 的左边, 因此先自加然后再取值
//拓展研究一下原理:
// 小坑 与编译器的编译原理有关,不同的编译器所得的值可能会不同
a = 5 ;
printf("%d , %d , %d , %d \n" , a++ , ++a , a-- , --a );
return 0;
}
#include
int main()
{
a = 100 , b = 250 ;
if ( ++a && a < 100 && ++b && --a );
//以上表达式中第一个条件 ++a 是成立的, 但是第二个条件不成立,导致后面的所有表达式无法运行
//因此最终输出a = 101, b= 250
return 0;
}
a = 100 , b = 250 ;
if ( a < 100 || ++b || --a );
//以上表达式中,表达式1 为假 , 因此会继续往后面判断,
//第二个表达式为真 , 因此将停止后面所有表达式的判断(不执行)
//输出结果 a = 100 , b = 251位运算符:
#include
int main()
{
int a = 3 ; //2 a->> 0000 0000 0000 0000 0000 0000 0000 0011
~a; //->>1111 1111 1111 1111 1111 1111 1111 1100
printf("a:%d,%x\n" , a,a); //
printf("~a:%d,%x\n",~a,~a); //结果为-4,~a的符号位不变,取补码=反码加1
return 0;
}
int a = 3 ;//a->> 0000 0000 0000 0000 0000 0000 0000 0011
int b = 5 ;// b->> 0000 0000 0000 0000 0000 0000 0000 0101
a&b; //->0000 0000 0000 0000 0000 0000 0000 0001
printf("a&b:%d\n" , a&b ); // 1
int a = 3 ;
int b = 5 ;
//a->> 0000 0000 0000 0000 0000 0000 0000 0011
//b->> 0000 0000 0000 0000 0000 0000 0000 0101
a|b->0000 0000 0000 0000 0000 0000 0000 0111
printf("a|b:%d\n" , a|b ); // 7
int a = 3 ;
int b = 5 ;
//a->> 0000 0000 0000 0000 0000 0000 0000 0011
//b->> 0000 0000 0000 0000 0000 0000 0000 0101
a^b;// 0000 0000 0000 0000 0000 0000 0000 0110
printf("a^b:%d\n" , a^b ); // 6
#include
int main()
{
int a=3,b=5;
printf("a=%d,b=%d\n",a,b);
a=a^b;
b=a^b;
a=a^b;
printf("a=%d,b=%d\n",a,b);
return 0;
}
结果:
原理:
#include
int main()
{
int a = 4080 ; // 0000 0000 0000 1111 1111 0000
// 把数据的第8位以及第4位设置为 0
int b = 0x11 ; //0x11=0001 0001;
a = a ^ ( b << 4) ;
printf("a : %d\n" , a );
// 把数据的第 20 位以及 23 位设置为 1
int c = 0x09 ;//0x09= 1001
a = a | (c << 20 ) ;
printf("a : %d\n" , a );
return 0;
法二:(工作常用)
位置零:a&=~(1<
位置1:a|=1<
#include
int main()
{
int a=4080;
a|=(1<<20)|(1<<23);
a&=~((1<<4)|(1<<8));
printf("%d",a);
return 0;
}
#include
int main()
{
int a=5,b=6;
//如果a>b,则max=a,否则max=b;
int max=a>b?a:b;
printf("%d\n",max);
return 0;
}