其他运算符:
Sizeof 运算符和size_t类型:sixeof运算符以字节为单位返回操作数大小。其操作数可以是一个具体的数据对象(如一个变量名)或是一类型
 
// 5-8.c------   使用sizeof 运算符
#include <stdio.h>
int main (void)
 
{
       int n = 0 ;
       size_t intsize;
       intsize = sizeof (int);
       printf ("n = %d,n has %u bytea :all ints have %u bytes .\n ",n,sizeof n,intsize);
              //系统不支持用%zd所以这里用%u来代替它
       return 0 ;
}
C规定sizeof 返回一个size_t类型的值。这是一个无符号的整数类型,但是他不是一个新类型。它与可移植类型相同,但是根据标准类型定义的。当使用size_t时编译器会用适合你的系统的标准类型代替之。可以用%zd来显示size_t类型作为printf ()说明符。如果系统不支持用%zd可以用%u或%lu来代替它。
 
取模运算符:%
       取模运算符用于整数运算,这个运算符计算出用%号左边的数除以%号右边的整数得到的佘数。例如:13%5(读作“对13除以5取模”)所得的值为3。取模运算符对浮点无效.
//5-9.c --- 对输入的秒数转换为分钟和秒
#include <stdio.h>
#define FZMS 60 //每分钟的秒数
int main (void)
{
       int sec , min, left ;
 
       printf ("请输一个大于或等于0的整数\n");
       scanf ("%d",&sec);
       while (sec > 0)
       {
              min = sec / FZMS; //截尾后得到分钟数
              left = sec % FZMS ;//取模后得到剩下的秒数
              printf ("你输入了%d分钟%d秒\n",min,left);
              scanf ("%d",&sec);
       }
       printf ("结束\n");
       return 0 ;
}
这里面又用到了while 循环的另一种方法。在这个程序中只有当输入0或者是负数或者计数器超出给定大小(int 类型的最大值)循环就会停止,这两种情况同样的重要的一点在于,每次循环都会修改被测试的变量的值。如果是负数则遵照:如果第一个操作数是负数那得到的模也为负数,如果第一个操作数为正数那么它的模也为正数(只看第一个操作数),实际上不管什么情况下如果a和b都是整数值,我们可以通过a减去(a/b)*b来计算a%b例如:
-11%5 的值:-11 - (-11 / 5)* 5 = -11 -(10)= -1
 
 
自增和自减运算符:++和—
       它的作用是将其操作数的值增加1 。这个运算符有两种方式:第一种:++出现在它作用变量的前面,另一种是出现在它作用变量的后面,这两种方式的不同在于值增加这一动作发生的准确时间的不同。
// 5-10.c --- 自增:前缀和后缀
#include <stdio.h>
int main (void)
{
       int a = 0 ,b = 0;
       while (b < 5)
       {
              b++;
              ++a;
              printf ("b = %d,a = %d \n",b,a);
       }
       return 0 ;
}
这个程序中的 b++和++a可以用b = b + 1;和a = a + 1; 代替,它们可以得到相同的结果。那么为什么不要用自增这样的语句呢:因为这样可以更为整洁,更易于阅读,效率高(因为它与实际的机器语言指令相似)。5-10.c改写
// 5-10.c --- 自增:前缀和后缀
#include <stdio.h>
int main (void)
{
       int a = 0 ,b = 0;
       while (++b < 5)
       {
             
              ++a;
              printf ("b = %d,a = %d \n",b,a);
       }
       return 0 ;
}
分析改写后:
       b加1后与5进行对比如果小于5,花括号里的语句将被执行一次,然后b在加1直到b的值大于5。这样作还有一个好处是它在一个地方集中了控制循环和的两个处理过程(判断循环和循环改变)如果在此处没有改变b的值程序将过入一个死循环。缺点将两个运算合并成一个运算会使程序难于理解,并易于产生计数错误。
 
//   5-11.c --- 后缀和前缀
#include <stdio.h>
int main (void)
{
       int a = 1, b = 1;
       int aplus , plusb ;
       aplus = a++;//后缀
       plusb = ++b;
       printf ("a     后缀和   b     前缀\n");
       printf ("%1d %5d %8d %5d \n",a,aplus,b,plusb);
       return 0 ;
}
运行结果:
a    后缀和 b    前缀
2     1     2     2
求值顺序:后缀时是先使用后自增。前缀是先自增后使用。
自减:--
       它和++一样不同的是它是减1。
优先级
       自增和自减运算符有很高的结合优先级:只有圆括号比它们的级别高,而且它们只能影响一个变量(一个可修改的左值)。