C语言的操作符(14)
2006-10-06 09:44
387 查看
C语言的操作符:
先来看两个具体的:
a<b<c 是 (a < b) < c
`a * b + 6' 是 `(a * b) + 6'
[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互反。就认为负多(富多)。
先来看两个具体的:
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 left | cast (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 | , |
/**//************************************************************
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语言中的关系操作符
- 20161215C语言基础14_函数
- 读c语言深度剖析 -- ++、--操作符
- C语言中移位操作符那点事
- C语言操作符的学习总结
- C语言面试题---操作符的优先级
- C语言操作符
- [c语言基础回顾]操作符和表达式中一些极其容易混淆的知识点
- C语言操作符
- 【C语言复习(五)】由++,--操作符的使用简单认识C编译器的“贪心法”编译机制
- CLisp 14:在LISP中用FFI调用C语言的程序-成功了
- 第04天C语言(14):for和while的对比
- 第05天C语言(14):多文件开发
- TQ2440 学习笔记—— 14、GPIO 接口【实验:用C语言实现】
- 【C语言】14-返回指针的函数与指向函数的指针
- c语言的那些操作符
- c语言:操作符小结
- C语言深度解析笔记2:操作符
- C语言之赋值操作符和表达式