网站空间每年继费到哪交,网站欢迎框代码,互动平台怎么注册,十大手机必备软件C语言——运算符及表达式 运算符运算符的分类#xff08;自增运算符#xff09;、--#xff08;自减运算符#xff09;赋值运算符逗号运算符#xff08;顺序求值运算符#xff09; 表达式 运算符
运算符的分类
C语言的运算符范围很宽#xff0c;除了控制语句和输入输出… C语言——运算符及表达式 运算符运算符的分类自增运算符、--自减运算符赋值运算符逗号运算符顺序求值运算符 表达式 运算符
运算符的分类
C语言的运算符范围很宽除了控制语句和输入输出以外的几乎所有的基本操作都可以作为运算符处理。通过查阅课本可知运算符的分为以下13类 我下面主要要讲述的是算术运算符、赋值运算符、以及逗号运算符
算数运算符 算术运算符总共有加法运算符 、-减法运算符 、*乘法运算符 、/出发运算符 、%求余运算符 五种要想了解算数运算符及运算符的使用必须先要了解运算符的优先级和结合性 那么什么时候会用到运算符的的优先级呢 就是在不同优先级的运算符混合在一起使用的时候高优先级的会先结合 结合性所谓结合性就是运算符的结合方向不同的运算符都有着不同的结合方向当同一优先级的运算符混合时运算符会按照结合性结合。 运算符的优先级和结合性如下表所示 算数运算符的用法和数学上了类似需要注意的是求余运算符% 求余运算的规则 1、求余运算中运算数不能是小数必须是整数 2、除数不能为零 3、结果的符号取决于左操作数 那何为左操作数呢 左操作数也就是左值通俗来说就是能够放在表达式左边的变量左值的定义是可定位的变量也就是可以在内存空间中找到相应的内存空间。 和左值相反的是右值右值是不可定位的也就是在内存空间中找不到相应的空间 常见求余运算符的用法%2用于求偶数和奇数%N可以取出在0~N - 1范围内的数等等 在产生一定范围内的随机数时也可以用到求余运算符例如
#include stdio.hint main(void)
{int i 0;srand(time(NULL));for(i 0; i 10; i){printf(%d\n, rand() % 100);}return 0;
}rand()产生的其实是伪随机数也就是产生的第一组数据是随机的如果再将程序执行一遍时打印的数字和上次打印的数据是一样的原因是rand()起初含有一个默认的种子如果不改变种子输出的就是一样的数据而srand()的作用就是给rand()种下一个种子把time(NULL)返回值是秒的数值作为参数传进srand()这样以变化的时间来作为种子就不断的产生不是每次全部都一样的随机数了。
自增运算符、–自减运算符
自增运算符的常见用法i、i i先用后加前提是i要参与到别的运算中才会起作用 i的值在内存中是这样存储的 假设i在内存中占四个字节i本身的值占用上面的四个字节并且会在其下面开辟出一块临时的空间用于存放表达式也就是i的值
i也就是常说先加后用这个先加后用的前提是i要参与到别的运算中才会起作用 和i不同的是i本身的值和表达式的值都是存放在同一块空间内的所以说i的效率更高因为i不用开辟额外的空间。 –自减运算符和自增运算符同理
自增运算符问题
#include stdio.hint main()
{int i 3;printf(%d\n, ii);return 0;
}问输出结果是什么 这里程序会报错原因是C语言编译器在处理时会从左往右逐个扫描将字符尽可能多的结合成C语言运算符所以遇到第一个时没有运算符结合遇到第二个和第一个结合成遇到第三个无法和结合遇到第四个和第三个结合成遇到第五个无法和结合自己作为单个运算符所以ii表达使得结合性是这样的最后(((i))i)因为i是一个表达式表达式为右值( )缺左值所以程序会报错。
#include stdio.hint main(void)
{int i 0;printf(%d %d\n, i, i);return 0;
}在实际的应用中是不建议这样使用的因为在多数系统中的函数传参顺序是从右往左的而且i先用后加到底什么时候加没有统一的规定。推荐用法如下
#include stdio.hint main()
{int n i;int m i;printf(%d %d\n, n, m);return 0;
}赋值运算符
赋值运算符常见用法
int a 0
int a b c d 0;当只有赋值运算符时只用考虑结合性即从右往左。 不同类型间的赋值 高精度 低精度例如float、double赋值给int类型这样会导致精度丢失反之将低精度赋值给高精度类型比如把int赋值给float、double类型会发生精度提升所以在进行赋值运算时要看清楚数据类型否则输出结果可能会和预想结果哦不一致。 整型赋值规则 int short long int short char 长类型短类型 //高位截断
int a 0x12345678;
short b a;
printf(%#x\n, b);长类型赋值给短类型 会发生高位截断输出结果是0x5678; 短类型长类型 无符号短类型 长类型 //高位补0
short a 0x1234;
int b a;
printf(%#x\n, b);无符号短类型 赋值给长类型高位补0输出结果为0x1234
有符号短类型 长类型 //符号位扩展 (高位补符号位)
short a 0x8234;
int b a;
printf(%#x\n, b);符号短类型赋值给长类型符号位会扩展 即高位补符号位输出结果为0xffff8234。
逗号运算符顺序求值运算符
语法 表达式1,表达式2,…,…,… 逗号表达式整个表达式的值是最后一个表达式的值比如
int a 10;
int b (1 2, a, 3 4);b的值就是3 4这个表达式的结果即7
表达式
表达式就是由运算符和运算数构成字符序列且表达式都是有值的和数据类型的 。 讲到表达式需要注意的是数据类型的转换特别是隐式类型的转换 横向的箭头表示必定的转换字符型char和短整型short在运算时必须先转换为整型intfloat型数据必须先转换为double型的数据这样做的目的是提高运算精度。 纵向的箭头表示的是当运算对象为不同数据类型时的转换方向例如int和double的数据类型进行运算时需要将int转换为double类型。 需要注意的时箭头方向只表示数据类型的高低由低往高转不是表示int先转换为unsigned int 在转换为long再转换为double。