您的位置:首页 > 编程语言 > C语言/C++

C语言的操作符(14)

2006-10-06 09:44 387 查看
C语言的操作符:

先来看两个具体的:

a<b<c 是 (a < b) < c 

`a * b + 6'  是  `(a * b) + 6'

Associativity Operator
left to right
() [], ->, .
right to left
!
(negation),
~
(bit-not)
 
++, --, - (unary) , * (unary), & (unary), sizeof
right to leftcast
(type)
left to right
*, /, % (modulus)
left to right
- +
left to right
<<, >>
left to right
<, <=, >, >=
left to right
==, !=
left to right
&
(bit-and),
|
(bit-or)
left to right
^
(bit-xor)
left to right
&&
(logical and)
left to right
||
(logical or)
right to left
?:
right to left
=, +=, -=, /=, %=, >>=, &=
left to right
,
[align=left]测试源代码:[/align]




/**//************************************************************


 Copyright (C), 1998-2006, Rx. Co., Ltd.


 FileName: example.cpp


 Author: longronglin


 Version : 1.0


 Date: 2006-10-05


 Description:      


 Function List:   


    1. int main()


 History:      


      <author> <time> <version > <desc>


      longronglin    2006/10/05     1.0      modify xxx . 


***********************************************************/


#include "stdio.h"








/**//*


 * 返回1为正确执行


 * 操作符测试过程


 *


 */




int oper()




...{


    int a;


    int b;




    a = 0;


    b = 0;




    printf("please input a number(a): ");    


    scanf("%d", &a);




    printf("!a = %d  ", !a);


    printf("~a = %d  ", ~a);




    printf("please input another number(b): ");    


    scanf("%d", &b);




    printf("!b = %d  ", !b);




    printf("a*b = %d  ", a * b);


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


    printf("a-b = %d  ", a - b);




    if(b != 0)




    ...{


        printf("a/b = %d  ", a / b);


        printf("a mod b = %d  ", a % b);


    }


    


    printf("a++ = %d  ", a++);


    printf("a-- = %d  ", a--);


    printf("a = %d  ", a);


    printf("a<<2 = %d  ", a<<2);


    printf("a = %d  ", a);


    printf("a>>2 = %d  ", a>>2);


    printf("a = %d  ", a);


    printf("a==b = %d  ", a==b);


    printf("a!=b = %d  ", a!=b);


    printf("--a = %d  ", --a);


    printf("a = %d  ", a);


    printf("++a = %d  ", ++a);


    printf("a = %d  ", a);


    printf("a & b = %d  ", a & b);


    printf("a = %d  ", a);


    printf("a | b %d  ", a | b);


    printf("a = %d  ", a);


    printf("a ^ b %d  ", a ^ b);


    printf("a = %d  ", a);


    printf("a && b %d  ", a && b);


    printf("a = %d  ", a);


    printf("a || b %d  ", a || b);


    printf("a = %d  ", a);


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


    printf("a = %d  ", a);


    printf("a>b ? a,b %d  ", a>b ? a:b);


    a=(b=3,b+1);


    printf("a=(b=3,b+1) %d  ", a);


    printf("a = %d  ", a);




    return (1);


}






/**//*


 * 返回1为正确执行


 * 主函数


 *


 */




int main()




...{


    oper();




    return (1);


}  



 运行结果:



这里可能有人会问为什么23的取反会是-24呢?

因为使用的是补码表示形式。你可以参看补码来判断,就对了。正数的原码、反码、补码相同。所以23的补码是(以一个字节为例)00010111。-24的补码为11101000你就发现结果正确了。-24的补码这样算:首先-24原码为10011000。最高位为1表示负数。然后算反码符号位不变,其他取反为11100111。然后算补码。各位加1。结果为11101000。

这里顺便提供一个好的记忆方法:-(x+1)和x互反。就认为负多(富多)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  语言 c 测试 date