【黑马程序员】---C语言运算符总结

------- android培训、 ios培训、期待与您交流! ----------


C语言运算符总结


C语言之所以无所不能,很大原因在于它有强大的计算能力。C语言一共有34种运算符。

1. 算数运算符

  

a.  +  加法运算符

除开能做加法运算,还能表示正号:+10

  b.  -   减法运算符

除开能做减法运算,还能表示符号:-10

  c.  *     乘法运算符

注意符号,不是x,而是*

  d.  /      除法运算符     

整数除于整数,还是整数

  e.  %   取余运算符(模运算)   

两个整数相除之后的余数

  拓展知识点:
      (1)  自动类型转换
      (2)  强制类型转换
      (3)  自动类型提升

//代码演示:

// 两个整数相除
 int a = 7 / 3;    // 结果为:2

// %取余结果的正负性只跟%左边的数值有关
int b = -7 % 3;   //结果为: -1
int c  = 7  % 3;   //结果为: 1

// 自动类型转换(double->int)
int a = 10.8;

// 强制类型转换(double->int)
 int b = (int) 10.5;

// 自动类型提升(int->double)
 double c = 10.6 + 6;

// 利用算术运算符的例子
#include 
/*
 提示用户输入一个时间的秒数,比如500秒就输入500,然后输出对应的分钟和秒,比如500s就是8分钟20秒
 */
int main()
{
    // 1.提示用户输入时间
    printf("请输入一个时间值(秒):\n");
    
    // 2.接收用户输入的时间
    int time;
    scanf("%d", &time);
    
    // 3.转换成对应的分钟和秒
    int minute = time / 60; // 分钟
    int second = time % 60; // 秒
    
    printf("%d秒 = %d分钟%d秒\n", time, minute, second);
    return 0;
}

心得体会:

(1)两个整数相除,结果为整数,1/2 的值是0

(2)取余%两边都是整数

(3)取余结果的正负性只跟%左边的数值有关

(4)自动将大类型转换为了小类型,会丢失精度

 

2. 关系运算符


a.   <       小于运算符

b.   >     大于运算符
c.   <=   小于等于运算符
d.   >=   大于等于运算符
e.   ==   等于运算符
f    !=   不等于运算符
//代码演示:
    
    int a = 10;


    // 根据关系运算的结果来判断
    if (10 == a)        //    不推荐写:a == 0;
        {
            printf("条件成立");
        } 
    else 
        {
            printf("条件不成立");
        }    
心得体会:

(1)关系运算的结果成立就为"真"(比如7>=3),就返回 1;不成立则为"假"(比如7<3),就返回 0 。

(2)在C语言中,没有boolean类型,任何非0值都为"真",只有0值才为"假"。

(3)关系运算符的结合方向为“从左往右

3.逻辑运算符


a.   &&  逻辑与运算符 

使用格式:“条件A&& 条件B”

又称 “短路运算符” ,如果第一个表达式不成立,后面一个表达式不参与计算

b.   ||   逻辑或运算符 

使用格式:“条件A || 条件B”

 如果第一个表达式成立,则后面一个表达式不参与计算

c.    !  逻辑非运算符 

使用格式:“! 条件A”

 如果条件成立,就返回0;如果条件不成立,就返回1

// 逻辑与 条件1 && 条件2   
int a  =  10>3 && 7<6;
int a = 0 && 10;

// 逻辑或 条件1 || 条件2
int a = 10;
int b = 10;
int c = (a<5) || (b++ - 10);

printf("a=%d, b=%d, c=%d\n", a, b, c);
    
// 逻辑非 !条件
// 如果条件成立,就返回0;如果条件不成立,就返回1
// int a = !(10>8);
int a = !-10;

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

心得体会:

(1)C语言规定:任何非0值都为“真”,只有0才为“假”,同样适合逻辑运算符。

(2)逻辑运算的结果也只有两个:成立就为"真",返回1;不成立就为"假",返回0。

(3)逻辑运算符的优先级顺序为: 小括号() > 负号 - > ! > 算术运算符 > 关系运算符 > &&> ||


4.赋值运算符


(1)简单赋值运算符:=  // int a = 1;

(2)复合赋值运算符
a.  +=  加赋值运算符  // a += 1, 等同于 a = a + 1;
b.  -=  减赋值运算符
c.  *=    乘赋值运算符
d.  /=     除赋值运算符     
e.  %=   取余赋值运算符
int a = 10;
// 复合赋值运算符
a += 5; // a = a + 5; 
a *= 5; // a = a * 5;  
a += 5 + 6 + 4; // a = a + (5 + 6 + 4);

5. 自增自减运算符

a.   ++  自增运算符

b.   --    自减运算符
//代码演示

a++;    // 先赋值,后自增
++a;    // 先自增, 后赋值

a--;      // 先赋值, 后自减
 --a;      // 先自减, 后赋值

心得体会:

自增自减只能用于变量上,不能用于常量上。比如:5++是错误的;


6. 逗号运算符


(1) 用逗号运算符连接起来的表达式称为逗号表达式,它的一般形式为:

表达式1, 表达式2, … …, 表达式n
(2)逗号表达式的运算过程是:从左到右的顺序,先计算表达式1,接着计算表达式2,...,最后计算表达式n。
(3)整个逗号表达式的值是最后一个表达式的值。
// 代码演示

int a = 2;
int b = 0;
int c;
c = (++a, a *= 2, b = a * 5);     //先计算++a,再计算a *= 2,最后计算b = a * 5;
printf("c = %d", c);

心得体会:

(1)明白整个整个逗号表达式的值是最后一个表达式的值即可,其它蛮简单。


7. 三目运算符

三目运算符  表达式1 ? 表达式2 : 表达式3
// 代码演示
    
 int a = 6;
 int b = (a > 5) ? 10 : 9;    // 如果a > 5 成立,则a = 10 ,否则 a = 9;
// 实例
//计算2个整数之间的最大值

int a = 10;
int b = 99;
int c = a>b ? a : b;
printf("c is %d\n", c);

心得体会:

(1)三目运算符可以用if(表达式1 ){表达式2} ; else {表达式3}来表示。


8. 位运算符


a. &    按位与  

常跟1进行按位与,得到某一位上面的值,可以用来判断奇偶性。

b. |    按位或     

c. ^     按位异或
1.相同数值进行异或,结果肯定是0,比如9^9
2.交换 9^5^6 == 9^6^5
3.任何数值跟0进行异或,结果还是原来的数值,9^0 == 9
4.a^b^a == a^a^b == 0^b == b
d. ~     按位取反

e. <<   左移  

//    7<

f. >>    右移  

//    7>>n ,等同于 7 / 2的n次方。

//实例演示

//使用位异或运算符交换两个变量的值
int a = 5;
int b = 10;

a = a ^ b;
b = a ^ b;
a = a ^ b;

printf("a=%d, b=%d\n", a, b);
/*
写一个函数,用来输出整数在内存中的二进制形式
*/

#include 
void printBinary(int number);

int main()
{
    printBinary(-10);
    return 0;
}

void printBinary(int number)
{
    
    // 记录现在挪到第几位
    // (sizeof(number)*8) - 1 == 31
    int temp = ( sizeof(number)<<3 ) - 1;
    
    while ( temp >= 0 )
    {
        // 先挪位,再&1,取出对应位的值
        int value = (number>>temp) & 1;
        printf("%d", value);
        
        // 
        temp--;
        
        // 每输出4位,就输出一个空格
        if ( (temp + 1) % 4 == 0 )
        {
            printf(" ");
        }
    }
    
    printf("\n");
}

心得体会:

(1)要知道按位与的应用,比如说跟1位与,可以得到某一位的值。用于判断奇偶性和打印十进制数对应的二进制代码

(1)按位异或可以用于交换两个整型变量的值。


9. sizeof

sizeof 可以用来计算一个变量或者一个常量、一种数据类型所占的内存字节数。
// 实例演示sizeof的3种形式

// (1) sizeof( 变量\常量 )
sizeof(5);
 char c = 'a';
sizeof(c);

 // (2) sizeof  变量\常量
sizeof 10;
char c = 'a';
sizeof c;

 // (3) ( 数据类型 )
 sizeof(float);    // 其中的括号不能省略

心得体会:

sizeof可以一个变量或者一个常量、一种数据类型所占的内存字节数,但是计算数据类型的字节数时要用括号括起来。


 

你可能感兴趣的:(C语言)