C 运算符, 有符号数据运算,

1.  b++运算

int a = 0;
int b = 1;

a = b++ + b++;
printf("a=%d\n",a);
printf("b=%d\n",b);

输出结果:

a=3

b=3

运算过程 : (b++的运算是先运算, 后自加)

(1) . 先把第一个b++看成 x=b++ ,  则 x=1,b=2 ;  第二个 b++ 看成 y=b++ , y=2, b=3

(2) . a=x+y  a=3

 

2 . ++b运算

int a = 0;
int b = 1;

a = ++b + ++b;
printf("a=%d\n",a);
printf("b=%d\n",b);

输出结果:

a=6

b=3

运算过程: (++b操作先自加, 后运算)

(1) . 把第一个 ++b  后 b=2 ;  第二个  ++b  后 , b=3 , 因为式子 ++b同优先级所以 , 式子 ++b 的结果是3 , 所以a=6

扩展 : a  =  ++b  +  ++b  +  ++b;

计算过程:

首先运算符 + 是双目运算符 , 则只能先计算前两个 ++b 的内容 有了前两个的结果 , 在结合后面的 + ++b

 

 

3. ++运算结合三目运算符

例子1

int main(int argc, char** argv)
{
  int x, y = 25;
  x = 70;
  y = x++ > 70 ? 100 : 0;             
  printf("x=%d  y=%d\n",x,y);
  return 0;   
}

输出结果:

x=71   y=0

运算过程:

(1) . 式子 x++ 的值是 70 , 然后x自加 x=71

(2) . x++ > 70运算是错误的,所以y=0

 

例子2

int x=10,y=9;
int a,b,c;
a = (--x==y++) ? --x : ++y;
b=x++;
c=y;

运算结果: a=8, b=8, c=10

运算过程: 

(1) . 首先判断   ( --x == y++ )  式子 --x 的值是 9 , 式子 y++ 的值是 9  , x=9 , 有= 10, 这个判断是正确的

(2) . 判断式子正确 会执行 ? 后的 --x , x=8

(3) . 式子 x++ 是先赋值 x 的值 , 在进行 x 自加 1

 

 

例子:

#include <stdio.h>

#define pro(x)  (x*x)

int main(int argc, const char *argv[])
{

	int i=3,j,k;
	j = pro(i++); // j = i++ * i++
	k = pro(++i); // k = ++i * ++i
	printf("j=%d\nk=%d\n",j,k);
	return 0;

} // j=12   k=49

  

 

 

 

 

4 .  逗号运算符

float x=10.5,  y=1.8, z=0;

z = (x=5, y = 6, x+y);   z赋值为 11 ,   x赋值为 5 ,   y赋值为6

z = x=5, y = 6, x+y      这个式子的结果为11 , x 为5 ,  z 为 5 , y 为 6

 

 5 . sizeof() 运算符   sizeof(<类型或变量名>)

 求所占的字节数

char buf[] = "hello";           sizeof(buf) 结果为6 , 字符串hello结尾有一个 \0

char buff[10] = "hello";      sizeof(buff) 结果为10 数组的长度固定为10 个字节

       char *p = 0;                sizeof(p); 结果为 4  , 32位机上指针的占4个字节

    sizeof(char);                  结果为1, char类型占一个字节

 

posted on 2019-04-25 17:33  管理员D  阅读(339)  评论(0)    收藏  举报

导航