zoukankan      html  css  js  c++  java
  • 05-C语言运算符

    目录:

    一、进制转换

    二、常量

    三、sizeof

    四、运算符

    五、赋值运算符

    六、自增减运算符

    七、关系运算符

    八、逻辑运算符

    九、取址寻址运算符

    回到顶部

    一、进制转换

    1 进制转换是人们利用符号来计数的方法,包含有多种数据转换,进制转换由一组数码符号和两个基本因素(位与权),进制包括二进制、十进制、十进制。

    2 二进制和十进制

    位与权:

    9   3位

    10  1权

    整数93在二进制在一个字节中的二进制存储方式

    0   1   0   1   1   1   0   1位

    128 64  32  16  8   4   2   1权

    零和正数:符号位为最高位值为0

    二进制转换为十进制:一位加权,零位不见

    01011101  = 1 + 4 + 8 + 16 + 64  = 2^0 + 2^2 + 2^3 + 2^4 + 2^6  = 93

    01101101  = 1 + 4 + 8 + 32 + 64  = 2^0 + 2^2 + 2^3 + 2^5 + 2^6  = 109

    十进制转换为二进制:有权添1,无权补0

    93 = 0101 1101

    93-64=29-16=13-8=5-4=1-1=0

    练习:

         1 107十进制数转换成二进制 0110 1011

             107-64=43-32=11-8=3-2=1-1=0

         2 0110 0111二进制数转换成十进制

             1 + 2 +4 +32 +64 = 103

         3 十进制54,十转二,二转十

             54-32=22-16=6-4=2-2=0   0011 0110

             0011 0110 = 2+4+16+32=54

         4 克里斯-波什 球衣号码1 下面是什么?     winning

             W   01110111   I   01101001   N 01101110

             N   01101110   I   01101001   N 01101110

           G    01100111

             1+2+4+16+32+64=119    W

             1+8+32+64=105    I

             2+4+8+32+64=110    N

             1+2+4+32+64=103   G

    回到顶部

    二、常量

    1 常量就是不可改变的值

    1.

    int数值      代表的数据类型

    3          int

    3L         long int

    3LL        long long int

    3u         unsigned int

    3ul         unsigned long

    2.

    float数值      代表的数据类型

     

    3.5          double

    3.5f          float

    3.5F         long double

     

    回到顶部

    三、sizeof(参数)

    计算出数据所占内存空间大小,以字节为单位。

    参数可以是类型、变量和表达式,但sizeof()不负责计算表达式的值,只关注类型。

    sizeof()的占位符是%ld

     1 #include <stdio.h>
     2 
     3 int main()
     4 {
     5     char ch;
     6     int i;
     7     long int i2 = 8L;
     8     int i3 = 10;
     9     printf("字符ch的存储空间是:%ld
    ",sizeof(ch));
    10     printf("变量i的存储空间是:%ld
    ",sizeof(i));
    11     printf("数值8的存储空间是:%ld
    ",sizeof(8));
    12     printf("数值8L的存储空间是:%ld
    ",sizeof(8L));
    13     printf("变量i2的存储空间是:%ld
    ",sizeof(i2));
    14     //sizeof不负责运算
    15     printf("变量i3=4的存储空间是:%ld
    ",sizeof(i3=4));
    16     printf("i3的值不变:%d
    ",i3);
    17     return 0;
    18 }

    回到顶部

    四、运算符

    c语言的一个特点是它更强调表达式而不是语句,表达式是表示如何计算值的公式,最简单的表达式是常量和变量,变量表示程序运行的时候需要计算的值,常量表示不变的值,更加复杂的表达式把运算符用作操作数。

    1 算术运算符:  +  -  *  /求商  %取余

    / 整数相除,取整数部分

    /和%都不能对0操作,否则中断程序,但/0.0允许,inf是无穷大

    %只能用于整数,浮点数补支持

    /向0整除(取更靠近0的数),运算时跟数学是一样的

    %符号与%前面的数字符号相同,取余跟数学不一样没只能%前面的匹配

    scanf("%*c") 清除缓存

    练习:

         1.从键盘输入一个秒数,输出几小时几分钟几秒,比如:3666秒,得到1小时1分钟6秒

     1 #include <stdio.h>
     2 //从键盘输入一个秒数,输出几小时几分钟几秒,比如:3666秒,得到1小时1分钟6秒
     3 int main()
     4 {
     5     int miao;
     6     printf("请输入一个秒数:
    ");
     7     scanf("%d",&miao);
     8     int h = miao/3600;
     9     int m = miao%3600/60;
    10     int s = miao%60;//miao%3600%60
    11     printf("%d小时%d分钟%d秒
    ",h,m,s);
    12     return 0;
    13 }

          2 输入一个数,固定长度是三位数,输入123,输出结果倒置:321

     1 #include <stdio.h>
     2 //输入一个数,固定长度是三位数,输入123,输出结果倒置:321
     3 int main()
     4 {
     5     int i;
     6     printf("请输入一个数:");
     7     scanf("%d",&i);
     8     int r1 = i / 100;//1
     9     int r2 = i % 100 / 10;//2
    10     int r3 = i % 10;//3
    11     //int r = r3 * 100 + r2 * 10 + r1;
    12     //printf("倒置数是:%d
    ",r);
    13     printf("倒置数是:%d%d%d
    ",r3,r2,r1);
    14     return 0;
    15 }

    回到顶部

    五、赋值运算符=

    把等号右边的值付给左边的变量,从右向左

    int i = 10;

    int j = 20,k = 30;

    i = j = k = 6;//不推荐

    k = 6;

    j = k;

    i = j;

     1 #include <stdio.h>
     2 
     3 int main()
     4 {
     5     int i = 10;
     6     int j = 20,k = 30;
     7     i = j = k = 6;
     8     printf("i:%d,j:%d,k:%d
    ",i,j,k);
     9     //int 10 = x;错误
    10     //i + j =10;错误
    11     printf("i=10:%d
    ",i=10);//表达式i=10的值也是10
    12     return 0;
    13 }

     左边必须是一个左值(变量),不能是常数,也不能是表达式。

    =赋值 ==相等

    符合赋值:

    i+=3 -> i=i+3

    i-=3 -> i=i-3

    i*=3 -> i=i*3

    i/=3 -> i=i/3

    i%=3 -> i=i%3

     

    回到顶部

    六、自增、自减运算符

    ++、--:变量自增自减,只能用于变量,不能用于常量或表达式或其他。

    可以用于整型变量 int/short/long、浮点型 float/double和字符型char.

    一般只用于整型。

    ++i 先自增,在运算

    i++ 先运算,在自增

    i,i++,==i,从内存上说是同块内存

    在同一个表达式中不要对同一个变量多次进行自增自减操作,难道加大,代码变的不可读。

     1 #include <stdio.h>
     2 
     3 int main()
     4 {
     5     int i = 10;
     6     int j = 20;
     7     i++;
     8     j--;
     9     printf("i的值:%d
    ",i);
    10     printf("j的值:%d
    ",j);
    11     int k = 0;
    12     int l = 10;
    13     //k = l++;//后缀表达式,先赋值在自增
    14     //k = ++l;//前缀表达式,先自增在赋值
    15     //k = ++l + l++;
    16     //k = l++ + ++l;
    17     printf("k的值:%d
    ",k);
    18     printf("l的值:%d
    ",l);
    19     return 0;
    20 }

    回到顶部

    七、关系运算符

    1 主要用来表示两个或多个数、变量、表达式之间的关系、在c语言中,关系运算符和数学上的<、>、>=、<=、一样,==等于、!=不等于,表达式产生的结果,1代表成立,0代表不成立。

    2 关系运算符也可以用于比较整数和浮点数,也允许混合类型操作数。

     1 #include <stdio.h>
     2 
     3 int main()
     4 {
     5     int num1 = 20;
     6     int num2 = 15;
     7     printf("num1>num2:%d
    ",num1>num2);
     8     //printf("num1=num2:%d
    ",num1=num2);
     9     printf("num1==num2:%d
    ",num1==num2);
    10     printf("num1!=num2:%d
    ",num1!=num2);
    11     return 0;
    12 }

    回到顶部

    八、逻辑运算符

    1 &&与  ||或  !非

    通常用来表示表达式间的关系

    2 逻辑运算符所产生的结果:0表示补成立 1表示成立

    当操作数处理结果不是1 或者0时,逻辑运算符将非0操作数作为真值处理。1真  0假  非0真

    3 表达式1 &&(且) 表达式2 结果为:

    真 && 真,结果为真

    真 && 假,结果为假

    总结:只要有一个为假,结果就为假。都为真时,才为真。

    4 表达式1  ||  表达式2  结果为:

    真 || 真,结果为真

    真 || 假,结果为真

    总结:只要有一个为真,结果就为真。都为假时,才为假。

    5 非表达式   !表达式1

    表达式1      !表达式1

    真                                     假

    假                                     真

     1 #include <stdio.h>
     2 
     3 int main()
     4 {
     5     int num1 = 20;
     6     int num2 = 15;
     7     int num3 = 30;
     8     int num4 = 35;
     9     //&& 逻辑与表达式
    10     printf("(num1>num2)&&(num3>num4):%d
    ",(num1>num2)&&(num3>num4));
    11     printf("(num1>num2)&&(num3<num4):%d
    ",(num1>num2)&&(num3<num4));
    12     //逻辑或表达式
    13     printf("(num1>num2)||(num3>num4):%d
    ",(num1>num2)||(num3>num4));
    14     printf("(num1>num2)||(num3<num4):%d
    ",(num1>num2)||(num3<num4));
    15     printf("(num1>num2):%d
    ",num1>num2);
    16     //非表达式,取反
    17     printf("!(num1>num2):%d
    ",!(num1>num2));
    18     //逻辑运算符 短路与 num3=10 并没有执行
    19     printf("(num1<num2)&&(num3=10):%d
    ",(num1<num2)&&(num3=10));
    20     printf("num3:%d
    ",num3);
    21     //逻辑运算符 短路或 num3=15 并没有执行
    22     printf("(num1>num2)||(num3=15):%d
    ",(num1>num2)||(num3=15));
    23     printf("num3:%d
    ",num3);
    24     return 0;
    25 }

    6 短路运算

         短路与:若第一个表达式1为假,后面的表达式不在执行,

         短路或:若第一个表达式1为真,后面的表达式不在执行,

    回到顶部

    九、取址运算符& 寻址运算符*

    1 在变量前加上&,得到变量在内存中的地址,内存会被划分成以字节为单位,一块一块的空间,没一个空间都有唯一的标识,就是内存地址。

    2 在地址前使用*寻址符号,得到该地址保存的数据,值

     1 #include <stdio.h>
     2 
     3 int main()
     4 {
     5     int i =10;
     6     printf("i的地址:%p
    ",&i);
     7     //通过*号 根据内存地址 找到内存中的值
     8     printf("i的值:%d
    ",*&i);
     9     return 0;
    10 }

      ASC码表字符查值码:

     1 #include <stdio.h>
     2 
     3 int main()
     4 {
     5     char ch;
     6     int i = 0;
     7     printf("请输入要查询的字符:
    ");
     8     scanf("%c",&ch);
     9     printf("%c对应的数值是:%d
    ",ch,ch);
    10     for (i; i <= 127; i++) {
    11         scanf("%*c%c",&ch);
    12         printf("%c对应的数值是:%d
    ",ch,ch);
    13     }
    14     return 0;
    15 }

    ASC码表值查字符码:

     1 #include <stdio.h>
     2 
     3 int main()
     4 {
     5     char ch;
     6     int d;
     7     int i = 0;
     8     printf("请输入要查询的数值:
    ");
     9     scanf("%d",&d);
    10     printf("%d对应的字符是:%c
    ",d,d);
    11     for (i; i <= 127; i++) {
    12         scanf("%*c%d",&d);
    13         printf("%d对应的字符是:%c
    ",d,d);
    14     }
    15     return 0;
    16 }
  • 相关阅读:
    【Linux/Ubuntu学习5】Ubuntu 下android 开发,eclipse不能识别手机
    【高德地图开发3】---地图显示
    【高德地图开发2】---配置工程
    【高德地图开发1】---简介
    【Linux/Ubuntu学习4】ubuntu 下面安装 vim 的问题
    【Linux/Ubuntu学习3】解决ubuntu解压windows生成的zip文件时乱码问题
    【开源项目8】Android开源项目分类汇总【畜生级别】
    【开源项目7】Android视图注入库:butterknife
    【Android 界面效果34】Android里Service的bindService()和startService()混合使用深入分析
    【开源项目6】介绍MenuDrawer这个牛x的控件,实现左右出菜单,上下出菜单
  • 原文地址:https://www.cnblogs.com/yangmx/p/3460509.html
Copyright © 2011-2022 走看看