一 :操作符
1.1:算术操作符 + - * / %注意:1.取%的两个操作数必须为整数类型。 2.两个操作数中只要有一个为浮点型数据,则结果为浮点型。
1.2:移位操作符 左移位操作<<:内存中最左边的几位被丢弃,值最右边的几位用0补齐。
右移位操作>>: (一)逻辑移位:内存中最右边的几位被丢弃,值最左边的几位用0补齐。 (二)算数移位:内存中最右边的几位被丢弃,值最左边的几位用符号位补齐。
注意:逻辑移位不常见,主要弄清算数移位,这里,我们也只讲到算数移位。
警告:所有无符号数执行的移位操作都是逻辑移位。
1 .3:位操作符
& | ^
&:按位与。将两个操作数的二进制位进行按位与,全1则1。(想得到某一位时用) |:按位或。将两个操作数的二进制位进行按位或,有1则1。(可将某一位变为1) ^:异或。将两个操作数的二进制位进行按位异或,相同为0,相异为1。(保证相异的结果)
注意:& | ^ 三者都要求操作数为整数类型。
1.4:赋值
=
赋值操作符,用一个等号表示。赋值是表达式的一种,而不是某种类型的语句。 eg: x=y+3; 这条赋值语句包含两个操作符:+ =,先执行加法,算出y+3的值,然后再将其赋给x.
赋值操作符的结合性是从右向左计算的。 eg: a=x=y+3; 相当于:x=y+3; a=x;
复合赋值符: += -= *= /= %= <<= >>= &= |= ^= eg: a+=b+3; 相当于a=a+b+3;
1.5:单目操作符
! ++ - & sizeof(类型) ~ -- + *
!:逻辑反操作。如果操作数为真(1),则其结果为假(0),操作数为假(0),则 其结果为真(1)。 ~:按位取反。操作数的二进制形式中1变0,0变1。 -:操作符产生的的操作数为负值。 +:操作符产生的的操作数为正值(一般省略不写)。 &:地址操作符。产生操作数的地址。 *:间接引用操作符,也称解引用操作符。它与指针一起使用,用于访问指针所指向的 值。 sizeof:判断数据类型长度的关键字,以字节为单位。 eg: int x = 0; int arr[]={1,2,3,4,5,6,7,8,9,0};
常见用法:sizeof(int)=4;//整型所占的字节数 sizeof(x)=4;//整型变量a所占字节 sizeof(arr)/sizeof(arr[0])=10;//求数组长度 sizeof(arr)=40;//整个数组所占字节数 注意:数组名单独放在sizeof后,不表示数组首元素的地址 &arr表示整个数组的地址而不是首元素的地址 sizeof x//正确 sizeof int//错误,不能将两个关键字单独放在一起,应加上括号sizeof(int),说明sizeof不是函数而是关键字 sizeof(int [10])=40;//正确
eg: int a=10; short s=0;
sizeof(s=a)=2;//表达式没有参与运算,说明sizeof不是函数而是关键字
1.6:关系操作符
> (大于) >=(大于等于) ==(等于) < (小于) <=(小于等于) !=(不等于)
如果两端的操作数符合操作符指定的关系,表达式的结果是1,如果不符合,表达式的结果是0。
注意:这些操作符产生的结果都是一个整型值,而不布尔值
1.7:逻辑操作符
&& ||
&&:逻辑与。expression1 && expression2 的值都是真的,整个表达式的值才是真的, 两个表达式中的任何一个表达式的值为假,那么整个表达式的值为假。 ||:逻辑或。expression1 || expression2 的值有一个是真的,整个表达式的值就是真 的,两个表达式的值都为假,那么整个表达式的值才为假。
注意区别逻辑操作符(&&和||)和位操作符(&和|):二者不可互换。
区别:1.&&和||操作符具有短路性质,即如果表达式的值根据左操作数便可决定,它就 不再对右操作数进行求值。而&和|对两边的操作数都要进行求值。 eg: int a=3; if(a>5) && (a<10) …… 因为a>5不满足条件,则表达式不再计算(a<10)的值。 2.逻辑操作符用于测试零值和非零值,而位操作符用于比较它们的操作数中对应 的位。 eg: int a=1; int b=2; if(a && b)……//结果为真 if(a & b)……//结果为假
1.8:条件操作符
expression1 ?expression2 : expression3
首先计算expression1,如果它的值为真,那么整个表达式的值就是expression2的值,expression3不会进行求值。但是,如果expression1的值为假,那么整个表达式的值就是expression3的值,expression2不会进行求值。
eg: int x=3,y=5; (x < y) ? x++ : y++ ; //3小于5结果为真,执行x++,x=4 (x > y) ? x++ : y++ ; //3大于5结果为假,执行y++,y=6
1.9:逗号操作符
expression1,expression2,……,expressionN
逗号表达式从左至右逐个进行求值,整个表达式的结果为最后一个表达式的值。
eg: if(a*2, b+1, c/2, d>0)……//如果d>0的结果为真,则执行if语句,否则不执行。
年轻就要醒着拼,蚊子好多,呜呜呜!