初识c语言——操作符

1. 操作符

1.1 算数操作符  +   -   *   /   %

       需要特别注意的为:/  除,结果为商值。若想结果输出为小数值,则除数和被除数中至少有一个为小数。     例:9/2=4;9.0/2=4.5;9/2.0=4.5

                                      % 取模(余),结果为余数。  例:3%2=1;7%3=1

#include 
int main()
{
	int a = 9 / 2;
	float b = 9.0 / 2;
	float c = 9 / 2.00;
	int d = 10 % 4;
	printf("%d\n", a);
	printf("%f\n", b);
	printf("%f\n", c);
	printf("%d\n", d);
	return 0;
}                       /*输出结果为:4
                                     4.500000
                                     4.500000
                                     2*/

1.2 移位操作符——移动的是二进制位   >>      <<  

       >> 右移 —— 相当于乘以2

       << 左移 —— 相当于除以2

       例:当 int a=8;时,a=8对应的二进制位为1000

              因为a为整形,即4个字节,32个比特位

              所以 int a=8 对应的二进制为:00000000000000000000000000001000               8

                                         左移一位为:00000000000000000000000000010000               16   

                                         右移两位为:00000000000000000000000000000010                2

#include 
int main()
{
	int a = 8;
	int b = a << 1;
	int c = a >> 2;
	printf("%d\n", b);
	printf("%d\n", c);
	return 0;
}                         /*输出结果为:16
                                       2*/

1.3 位操作符   &    ^    |  

       &   按位与

       ^    按位异或

       |     按位或

1.4 赋值操作符   =   +=   -=   *=   /=   &=   ^=   |=   >>=   <<=

      例:int a = 2;

             int a = a + 5;

             以上可简化写成:int a += 5;

1.5 单目操作符   !   -   +   &   sizeof   ~   --   ++   *   (类型)

       单目操作符:只有一个操作数。   例:-a

       双目操作符:有两个操作数。     例:a-b

单目操作符 用法
!

逻辑反操作

- 负值
+ 正值 —— 一般省略
& 取地址
sizeof 计算操作数的类型长度(单位为字节)—— 可计算类型、变量、数组的大小
~ 对一个数的二进制按位取反
-- 前置、后置--
++ 前置、后置++
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换
   1.5.1  ! 逻辑反操作

             C语言中,0表示假;非0表示真。

              用法:if (a)       //如果a为真

                         if (!a)      //如果a为假

 // ! 逻辑反操作
#include 
int main()
{
	int a = 10;          // a=10为非0,为真,所以!a输出结果为0
	int b = 0;           // b=0,为假,所以!b输出结果为真,真的输出值均为1
	printf("%d\n", !a);
	printf("%d\n", !b);
	return 0;
}                       /*输出结果为:0
                                     1*/
   1.5.2  sizeof  长度计算操作符

             sizeof 可以计算类型、变量和数组的大小,单位为字节。

             如下代码中,计算数组的大小的输出值为40是因为该数组中有10个元素,每个元素为1个整形,一个整形为4个字节,因此输出值为40;

             计算数组中元素个数是利用数组的总大小/一个元素的大小 = 个数

 // sizeof 长度计算操作符
#include 
int main()
{
	int a = 10;
	int arr[10] = { 2 };
	int sz = sizeof(arr) / sizeof(arr[2]);
	printf("%d\n", sizeof(int));         //计算类型的大小
	printf("%d\n", sizeof(a));           //计算变量的大小
	printf("%d\n", sizeof(arr));         //计算数组的大小
	printf("%d\n", sizeof(arr[0]));      //计算数组的大小
	printf("%d\n", sizeof(sz));          //求数组元素个数
}                    

                           /*输出结果为:4
                                        4
                                        40
                                        4
                                        4*/
   1.5.3  ~  对一个二进制数进行按位取反——位指的是二进制位

             记住位打印类型及三码(原码、反码、补码)转换规则即可。

             按位取反———将所有位全部取反,即将所有二进制位中数字 0变成1,1变成 0

             一个整数中的二进制表示有3种:原码、反码、补码。(正整数三码相同,负整数则需计算。

             针对负数计算方式:1. 写出二进制数的原码序列,一个整数的二进制序列最高位为符号位(负数的符号位为1),其余为有效位;

                                              2. 原码序列的符号位不变,有效位取反得到反码序列;

                                              3. 反码序列的符号位不变,有效位加1得到补码序列。

              例:二进制数 -1;—— 为整形,有4个字节,即32比特位。

                      原码:10000000000000000000000000000001

                      反码:11111111111111111111111111111110

                      补码:11111111111111111111111111111111

                      整数在内存中存储的是补码;%d打印出来的为真实值,即原码。

     例:int a = 0;

             a 二进制为:00000000000000000000000000000000                     (32位)

           ~a 二进制位:11111111111111111111111111111111               (补码)(32位)

                                   11111111111111111111111111111110              (反码)

                                   10000000000000000000000000000001      (原码)

           所以输出的数值为:-1

 // ~按位取反操作符
#include 
int main()
{
	int a = 0;
	printf("%d\n", ~a);
	return 0;
}                //输出结果为:-1
   1.5.4  --  ++  前置、后置 --  ++
 //前置-- ++操作符
#include 
int main()
{
	int a = 34;
	int b = ++a;  //先++,后使用
	printf("%d\n", b);
	printf("%d\n", a);
    return 0;
}                /*输出结果为:35
                              35*/
 //后置-- ++操作符
#include 
int main()
{
	int a = 34;
	int b = a--;  //先使用,后--
	printf("%d\n", b);
	printf("%d\n", a);
    return 0;
}                /*输出结果为:34
				   		      33*/
 //前置、后置-- ++操作符
#include 
int main()
{
	int a = 28;
	int b = a--;  //先使用,后--
	int c = ++b;
	printf("%d\n", b);
	printf("%d\n", a);
	printf("%d\n", c);
    return 0;
}                /*输出结果为:29
						      27
							  29*/
 //不建议研究
#include 
int main()
{
	int a = 2;
	int b = (++a) + (++a) + (++a) + (++a);    //++a优先级最高,先算出++a的最终值为6,在进行四个6相加
	printf("%d", b);
	return 0;
}                //输出结果为:24
   1.5.5  (类型)  强制类型转换符——类型不匹配时使用,不推荐使用
 //带小数点的默认为double类型——小数可以有1215位,float小数可以有6位
#include 
int main()
{
	int a = 3.14;
	printf("%d", a);
	return 0;
}                    //输出结果为:3
                     //此时会警告有丢失数据的可能,因为3.14为double类型               

 //正确写法
#include 
int main()
{
	int a = (int)3.14;
	printf("%d", a);
	return 0;
}               //输出结果为:3

1.6 关系操作符   >  >= 大于等于   <   <=   != 不等于   == 等于

1.7 逻辑操作符   &&  II

       &&  逻辑与——并且    有一假则为假,两同为真则为真

       ||     逻辑或——或者    有一真则为真,两同为假则为假

#include 
int main()
{
	int a = 3;
	int b = 0;
	int c = 5;
	int d = 0;
	int e = a && b;
	int f = a && c;
	int g = b && c;
	int h = a || b;
	int i = a || c;
	int j = b || c;
	printf("%d ", e);
	printf("%d ", f);
	printf("%d ", g);
	printf("%d ", h);
	printf("%d ", i);
	printf("%d ", j);
	return 0;
}                 // 输出结果为:0 1 0 1 1 1

 1.8 条件操作符   exp1 ? exp2 : exp3

        即三目操作符,有三个操作数,分别为 exp1    exp2     exp3

        若 exp1 成立,则 exp2 计算,整个表达式的结果为:exp2 的结果;

        若 exp1 不成立,则 exp3 计算,整个表达式的结果为:exp3 的结果;

        例:求较大值、较小值

//条件操作符   exp1 ? exp2 : exp3
#include 
int main()
{
	int a = 6;
	int b = 9;
	int max = 0;
	int min = 0;
	max = a > b ? a : b;
	min = a < b ? a : b;
	printf("max=%d\n", max);
	printf("min=%d\n", min);
	return 0;
}             /*输出结果为:max = 9
                           min = 6*/

1.9 逗号表达式   exp1, exp2, exp3, ...expN

        特点:从左到右依次计算,整个表达式的结果为最后计算的结果。

 //逗号表达式   exp1, exp2, exp3, ...expN
#include 
int main()
{
	int a = 2;
	int b = 9;
	int c = 7;
	int d = (b = a + 7, c = b - 3, b = c + 4);  //从左到右依次计算:b = 9  c = 6   b =10
	printf("%d\n", d);
	return 0;
}             //输出结果为:10

1.10 下标引用、函数调用和结构成员   []   ()   .   ->

int arr[10] = { 1,2,3,4,5,6,7 };
printf("%d", arr[5]);    //[]下标引用    ()调用函数
                         //调用函数时,函数名后边的()即为函数调用操作符,可以传递0-多个参数

你可能感兴趣的:(c语言,算法,数据结构)