三、其他运算符
3.1sizeof运算符
sizeof运算符以字节为单位返回运算对象的大小
运算对象可以是具体的数据对象(比如变量名)或数据类型,如果数据对象是类型,那么必须用圆括号把数据类型给括起来
例如:
int a = 0;//创建一个变量就给它初始化是个好习惯 printf("%d \n",sizeof(int)); //必须加圆括号,打印结果为4 printf("%d \n",sizeof n);//变量名可以不加括号,打印结果为4 printf("%d \n",sizeof(char));//打印结果为1 printf("%d \n",sizeof(long));//打印结果为4 printf("%d \n",sizeof(long long));//打印结果为8 printf("%d \n",sizeof(float));//打印结果为4 printf("%d \n",sizeof(double));//打印结果为8
C语言规定,sizeof 返回 size_t类型的值。(这是一个无符号(unsigned)整型)C99新增%zd转换说明用于printf()显示size_t类型的值。(如果系统不支持可以用%u或%lu代替)
3.2求模运算符:%
求模运算符(%)只能用于整数,不能用于浮点数
求模运算符给出左侧整数除以右侧整数的余数。例如
printf("%d",17 % 4);//打印结果为1,即17比4的四倍多1
3.3递增运算符:++
递增运算符有两种模式,前缀模式(如++i)和后缀模式(i++)。两者的区别在于递增行为发生的时间不同 。
//简单的说,i++是先使用,再++;++i是先++再使用
举个栗子:
例1:后缀++
int a = 100; int b = a++; printf("a = %d,b = %d",a,b); //打印结果:a = 101,b = 100 //对应上面说的,先使用:变量a的值先赋给b;再++:a = a + 1 //因此最后a = 101, b = 100
例2:前缀++
int a = 100; int b = ++a; printf("a = %d,b = %d",a,b); //打印结果:a = 101,b = 101 //对应上面说的,先++:a += 1;再使用:b = a(=101) //因此最后a = 101, b = 101
但是当单独使用递增(递减)运算符时,使用前缀or后缀都可,如:
i++; //或++i;
*在条件的判断中(比如下面这个),建议用前缀模式
while(++age < 60)
如果使用age++,age最后会增至61,多了一次判断,总归是比只递增到60来的不那么好
3.4递减运算符:–、
跟递增运算符道理相同,这里大抵就举两个例子罢
例1:后缀–
int a = 100; int b = a--; printf("a=%d b=%d\n", a, b); //打印结果:a = 99,b = 100 //先使用:b = a(=100);再--:a = a - 1 //因此最后a = 99, b = 100
例2:前缀–
int a = 100; int b = --a; printf("a = %d,b = %d",a,b); //打印结果:a = 99,b = 99 //对应上面说的,先--:a = a - 1;再使用:b = a(=99) //因此最后a = 99, b = 99
3.5优先级
递增/递减运算符的优先级很高,只有圆括号()的优先级比他们高。
如果i++是表达式的一部分,依旧是“先使用i,再++”
举个栗子:
int w = 2; int i = 6; int mix = (w + i++)*2; printf("%d",mix); //打印的结果是16 //这里要注意,i的值只有被使用以后才会递增为7 //还有一点,递增/递减运算符只能作用于一个变量 //具体到这段代码,++只作用于i而不是w+i