C语言操作符和表达式
2018-03-29 22:31
239 查看
1.算数操作符
+ - * / // 5 / 2 = 2 % // 5 % 2 = 1
注:
1.除%操作符之外,其他的几个操作符均可作用与整数和浮点数,但需要注意结果打印的格式和精度缺失。
2.对于/操作符,如果两个数都为整数,执行整数除法,而只要有浮点数执行的就是浮点数除法。
3.%操作符的两个操作数必须为整数。返回的是整除之后的余数。
2.移位操作符
左移操作符 <<
移位规则:左边抛弃、右边补零int num = 10; //00000000000000000000000000001010 num在内存中的二进制 num = num >> 1; //00000000000000000000000000010100 num左移一位的结果
右移操作符 >>
1.算数移位(常用)
移位规则:左边用原该值的符号位填充、右边丢弃2.逻辑移位
移位规则:左边用0补充、右边丢弃int num = -1; //11111111111111111111111111111111 内存中-1的补码 //算数右移 11111111111111111111111111111111 左边用原该值的符号位填充 //逻辑右移 01111111111111111111111111111111 左边用0补充
3.位操作符
& //按位与 两数补码同位比较,同为1为,其余为0 | //按位或 两数补码同位比较,有1就取1,都为0才取0 ^ //按位异或 两数补码同位比较,相同取0,不同取1
注:操作数必须是整数
#include <stdio.h> int main() { int num1 = 1; //00000000000000000000000000000001 int num2 = 2; //00000000000000000000000000000010 num1&num2; //00000000000000000000000000000000 num1|num2; //00000000000000000000000000000011 num1^num2; //00000000000000000000000000000011 }
例:求一个整数存储在内存中的二进制中1的个数
#include <stdio.h> int main() { int num = -1; int i = 0; int count = 0; //计数 for (i = 0; i < 32; i++) { if (((num >> i) & 1) == 1) count++; } printf("二进制中1的个数 = %d\n", count); return0; }
4.赋值
复合赋值符
+= -= *= /= %= >>= <<= &= |=
a += 1,即a = a + 1
5.单目操作符
! //逻辑反操作 对非0的数反为0,对0取反为1 - //负值 + //正值 & //取地址 sizeof //操作数的类型长度(以字节为单位) ~ //对一个数的二进制按位取反 -- //前置、后置-- ++ //前置、后置++ * //间接访问操作符(解引用操作符) (类型) //强制类型转换
sizeof和数组
#include <stdio.h> void test1(int arr[]) { printf("%d\n", sizeof(arr)); //4 } void test2(char ch[]) { printf("%d\n", sizeof(ch)); //4 } int main() { int arr[10] = {0}; char ch[10] = {0}; printf("%d\n", sizeof(arr)); //40 printf("%d\n", sizeof(ch)); //10 test1(arr); test2(ch); return 0; }
++和- -运算符
前置++、- -int a = 10; int x = ++a; //x = 11 先对a进行自增,然后使用a int y = --a; //y = 10 先对a进行自减,然后使用a
后置++、- -
int a = 10; int x = a++; //x = 10 a = 11 先使用a,然后对a进行自增 int y = a--; //y = 11 a = 10 先使用a,然后对a进行自减
解引用操作符
int a = 10; int p = &a; //定义指针p p = 20; //解引用操作
6.关系操作符
> >= < <= != //用于测试“不相等” == //用于测试“相等”
注:在编程的过程中==和=写错,导致错误
7.逻辑操作符
&& //逻辑与 || //逻辑或
注:逻辑与中,一旦出现0,则为0,后面的不再计算
逻辑与和按位与、逻辑或和按位或
1&2 ------> 0 1&&2 -----> 1 1|2 ------>3 1||2 ----->1
8.条件操作符
exp1 ? exp2 : exp3 a > 5 ? b = 3 : b = -3
9.逗号表达式
exp1, exp2, exp3, ...expn
逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果
int a = 1; int b = 2; int c = (a > b, a = a+10, a, b = a + 1); //逗号表达式
10.下标引用、函数调用和结构成员
1.[ ]
操作数:一个数组名 + 一个索引值int arr[10]; //创建数组 arr[9] = 10; //使用下标引用操作符 //[]的两个操作数是arr和9
2.( )
函数调用操作符接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数
#include <stdio.h> void test1() { printf("哈哈\n"); } void test2(const char *str) { printf("%s\n", str); } int main() { test1(); //使用()作为函数调用操作符 test2("hello"); //使用()作为函数调用操作符 return 0; }
3.访问一个结构成员
.结构体.成员名->结构体指针->成员名
struct Stu { char name[10]; int age; } int main() { struct Stu stu; struct Stu* pStu = &stu; //结构体成员访问 stu.age = 20; //结构体成员访问 pStu->age = 20; //结构体成员访问 return 0; }
11.表达式求值
隐式类型转换
c的整型算数计算总是至少以缺省整型的精度来进行的。为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通类型,这种转换被称为“整型提升”。算术转换
寻常算术转换 long double double float uunsiged long int long int unsigned int int
如果某个操作数的类型在上面的列表中排名较低,那么首先要转换为另一个操作数的类型后执行运算。
float f = 3.14; int num = f; //隐式转换,会有精度丢失
相关文章推荐
- C语言学习之操作符和表达式
- c语言操作符表达式小结
- [c语言基础回顾]操作符和表达式中一些极其容易混淆的知识点
- c语言中的操作符和表达式
- c语言中的操作符和表达式求值
- 0602 c语言操作符和表达式
- c语言操作符和表达式
- C语言(四) 操作符和表达式(下)
- C语言注意事项——数据类型、操作符和表达式
- [C语言]__操作符和表达式简单介绍__
- C语言操作符与表达式小结
- C语言_初成长_操作符和表达式
- C语言 操作符和表达式
- C语言中的操作符和表达式
- C语言之赋值操作符和表达式
- C语言的表达式和操作符
- C语言学习之操作符和表达式
- 数据类型,运算符和表达式01 - 零基础入门学习C语言02
- C语言中逗号运算符和逗号表达式
- 【C语言学习】《C Primer Plus》第5章 运算符、表达式和语句