培训第六天--数据类型转化,各运算优先级,语句结构

昨日回顾:

基本数据类型
运算符:算术运算符,关系运算符,逗号运算符
printf(),scanf()

========================================

今日内容

1.类型转化

(1)隐式转化

当赋值号 "=" 两边类型不同时,自动转化为精度较高的类型。
格式

foloat = int1 / int2 

5/3 = 1.00000
9.120000/5 = 1.824000

(2)显式转化

强制类型转化。

float = (float)int1 / int2

最终并不改变变量数据类型,只临时做一次类型转化。

2.位运算符

(1)二进制数:

由0和1组成。

    2^7  2^6  2^5  2^4  2^3  2^2  2^1  2^0
    128   64   32   16   8    4    2    1

    0101010 = 42    11111 = 31  10101 = 21

(2)八进制数:

由0~7组成的,八进制数开头时数字0,以区分八进制数。

  0345    0123    0765    0765

(3)十六进制数:

由 0~9 和字母 a~f 或 字母 A~F 组成的,并且以 0x 或 0X 开头。

        0x123  0xab34  0xABf35  0XFFF

(4)汇总

每位十六进制数,一一对应四位的二进制数。
每位八进制数,一一对应三位的二进制数。

          二进制   十进制 八进制 十六进制
 
          0000    0   0(000)   0
          0001    1   1(001)   1
          0010    2   2(010)   2
          0011    3   3(011)   3
          0100    4   4(100)   4
          0101    5   5(101)   5
          0110    6   6(110)   6
          0111    7   7(111)   7
          1000    8          8
          1001    9          9
          1010    10            a/A
          1011    11            b/B
          1100    12            c/C
          1101    13             d/D
          1110    14             e/E
          1111    15             f/F

     10101011 = 171, 0253, 0xab(0XAB,0xAB)
    0123 = 001 010 011
    0xa45 = 1010 0100 0101            

(6)位操作

&: 位与

将十进制数,八进制数,十六进制数转化为对应的二进制数,进行位与计算,对应位同时为1时,结果为1,否则为0!!

     4 & 3 = 0100 & 0011 = 0000 = 0

                0100
              & 0011
        ------------------
                 0100
            
    12 & 7 = 1100 & 0111 = 0100 = 4

|: 位或

按位相或,对应位为1,只要有1,则为1;同时为0,才为0!!

     4 | 3 = 0100 | 0011 = 0111 = 7

                 0100
              | 0011
        ------------------
                0111
        
     13 | 9 = 1101 | 1001 = 1101 = 13
    023 | 5 =010 011 | 101 = 027 = 23

~: 非

方法一
计算机是补码存储,原码输出!!!!!
原码:
正数的原码是其本身
负数的原码是在正数原码的基础上符号位为1
反码:
正数的反码是其本身
负数的反码是在其原码的基础上,符号位(最高位)不变,其余位按位取反。
负数的反码实在其原码的基础的上,符号位(最高位)不变,其余各位取反。
补码:
正数的补码是其本身
负数的补码是在其原码的基础上,符号位不变,取余各位取反然后加1,即反码的基础上加1。

        0001 0111   //十进制:23
        1110 1000   //按位取反,补码 
        1110 0111   //反码,减一  
        1001 1000   //原码输出,
        -001 1000`  //十进制:-24

方法二
取负减一

     ~023 = ~19  = -19 - 1 = -20        

^: 异或

对应位不同为1,相同为0。

      4 ^ 7 = 100 ^ 111 = 011 = 3
      5 ^ 3 = 101 ^ 011 = 110 = 6
        
            100
           & 111
        ------------------
             011

<<:左移

方法一
即转化为二进制,然后左移2位,低位补0。

         8 << 2 = 32

                1000
              100000

方法二
左移几位,即乘2的几次方!!

  8 × 2^2 = 32 

>>:右移

方法一
(同左移)即转化为二进制,然后 右移2位 。
例1:

        8 >> 2 = 32                 
                  1000
                  10

例2

           9 >> 2 = 2      //相当于取商
                  1001
                    10

方法二
左移几位,即除以2的几次方!!

           8/ 2^2 = 4  

2.赋值操作符

赋值号:=

    +=    num += i    num = num + i

    -=  num -= i    num = num - i

    *=    num *= i    num = num × i

    /=    num /= i    num = num / i
 
    %=    num %= i    num = num % i

    &=    num &= i    num = num & i

    |=    num |= i    num = num | i
 
    >>=   num >>= i    num =( num >> i)   //底层硬件使用较多
 
    <<=  num <<= i    num =( num << i) 

4.逻辑运算符和条件运算符

(1)逻辑运算符

&&:逻辑与

    表达式1 && 表达式2
    当表达式1和表达式2同时为真时,结果为真。
    注意,当表达式1为假时,结果直接为0。             

||:逻辑或

    表达式1 || 表达式2
    表达式1,表达式2只要有一个为真时,结果为真。
    注意,当表达式1为真时,结果直接为1。

!:非

    ! 表达式1 
    若表达式1为真时,结果为假。
    若表达式1为假时,结果为真。

(2)条件运算符

?:

表达式1 ? 表达式2 : 表达式3      //若表达式1为真,则执行表达式2,否则执行表达式3

a>b?a:b             //比较a、b大小
a>b?(a>c?a:c):(b>c?b:c)     //比较a、b、c大小

5.运算符的优先级

括号成员第一,全体单目第二,乘除余三,加减四,
位移五,关系六,等与不等排第七,
位与异或位或八九十,逻辑或与十二十一,
条件高于赋值,逗号运算最低!

6.C语言的三大结构

顺序结构,分支结构,循环结构

1.分支结构

(1) 简单if语句

       if(表达式) 
      {
       }

如果表达式为真,执行{}内语句。
如果表达式为假,则不执行

(2)if...else语句

         if
         {
         }
         else
         {
         }

(3) 多重if语句

      if
      {
      }
      else if
      {
      }
      else if
      {
      }
      ......
      else
      {
      }

(4)嵌套

      if
      {
        if
        {
           ....
        }
        else 
        {
        }
      }
      else
      {
      }

练习:

  输入成绩并分类
  90~100:优秀
  80~90: 良好
  60~80: 一般
  0~60:  不及格

注意数据有效性问题,即输入数据要在0~100之间。

(5)使用if注意事项

80 < num <=90   //错误
num > 80 && num <=90   //OK!

** if条件句后面只有一条语句时,可以不加{},
但此语句不能是变量定义语句。**
例:

 if(1)
printf("hello\n");
printf("world!\n");    // if的有效语句只有:printf"hello\n")

在if的{}里面定义的变量,只能在{}中使用,在外则无效!!
例:

if(1)
{
    printf("hello\n");
    int num = 10;
    printf("num = %d\n", num);
}
printf("num = %d\n", num);        //错误

2.switch...case:

(1)switch...cas语句

        switch (operation)
        case operation:
        break;
        ...
        case operation:
        break;
        default:
        break;

根据option的值选择执行case语句,若没有与之对应的case语句则执行default语句!

(2)注意:

default语句可以放在switch{}里的任意位置;
case语句后的{},可以省略不写,当case后的执行语句超过3条,建议加{}!!

(3)case语句中的break值情况而定

若case语句中无break,则顺次执行所有case语句,直到执行完所有case语句,退出switch。

 90~100
 80~89
 70~79
 60~69

3.循环结构

while( ) 、 do{}while( )、 for(;;)

(1)while( )先判断后执行

     while(表达式) 
     {
      执行语句          //循环体
     }              //无;!!

先判断条件是否满足执行条件,满足则执行循环体,不满足则退出循环!
若条件满足,则执行循环体,每执行一次循环体,进行一次条件判断。

(2)break/contiune

break:跳出循环!
continue:跳出本次循环,执行下一次循环。

(3)do{ }while( ) 先执行,后判断!!

    do
    {
     执行语句           //循环体
    }while(表达式);     //有;!!

if 语句和while语句 后有 “;” 不会报错!有时会陷入死循序。

(4)for(;;)

  for(表达式1;表达式2;表达式3)
  {
    执行语句            //循环体
  } 

表达式1:循环条件初始化。
表达式2:循环结束条件或者循环执行条件。
表达式3:循环步长或者变量值的更新。
注:表达式1,2,3可以任意省略,或全部省略
!!!但是 “;;”不可省略!!!

上课记完笔记,晚上花时间浪费在排版上无意义。

你可能感兴趣的:(培训第六天--数据类型转化,各运算优先级,语句结构)