1. 自动类型转换是由计算机自动完成的,当由低级别的向高级别的转换时,不会报警,但是当高级别的向低级别的转换时,会发出告警信息,信息意思就是提示会有部分数据丢失的可能。

2. 强制类型转换是通过“(数据类型)”的格式表示的,这样就不会产生告警信息了。

3. 运算符的优先级和结核性归纳总结表:

优先级 运算符     结合性
最高 (),     [],    -> 自 左 向 右
  !(逻辑非),  ~(取补),  ++,  --,  +(正号),  -(负号),  *(指针),  &(取地址符),  (type)sizeof  自 右 向 左
  *(乘),  /(除),%(取模符) 自 左 向 右
  +(加)、-(减) 自 左 向 右
  <<(左移),   >>(右移) 自 左 向 右
  <(小于)、 <=(小于等于),  >(大于),   >=(大于等于) 自 左 向 右
  ==(是否相等),   !=(是否不等) 自 左 向 右
  &(按位与) 自 左 向 右
  ^(按位非) 自 左 向 右
  |(按位或) 自 左 向 右
  &&(逻辑与) 自 左 向 右
  ||(逻辑或) 自 左 向 右
  ?:(条件运算符等同于if else) 自 右 向 左
  =,  +=,  -=,  *=,  /=,  %=, &=, ^=,  |=,  <<=,  >>= 自 右 向 左
最低 ,(逗号) 自 左 向 右

4. 关于左移和右移:

  

  先说左移,左移就是把一个数的所有位都向左移动若干位,在C中用<<运算符.例如:

  int i = 1;

  i = i << 2; //把i里的值左移2位

        也就是说,1的2进制是000...0001(这里1前面0的个数和int的位数有关,32位机器,gcc里有31个0),左移2位之后变成 000...0100,也就是10进制的4,所以说左移1位相当于乘以2,那么左移n位就是乘以2的n次         方了 (有符号数不完全适用,因为左移有可能导致符号变化,下面解释原因)

  需要注意的一个问题是int类型最左端的符号位和移位移出去的情况.我们知道,int是有符号的整形数,最左端的1位是符号位,即0正1负,那么移位的时候就会出现溢出,例如:

  int i = 0x40000000; //16进制的40000000,为2进制的01000000...0000

  i = i << 1;

            那么,i在左移1位之后就会变成0x80000000,也就是2进制的100000...0000,符号位被置1,其他位全是0,变成了int类型所能表示的最小值,32位的int这个值是-2147483648,溢出.如果再接着把i左移1位会出现什么情况呢?在C语言中采用了丢弃最高位的处理方法,丢弃了1之后,i的值变成了0.

  左移里一个比较特殊的情况是当左移的位数超过该数值类型的最大位数时,编译器会用左移的位数去模类型的最大位数,然后按余数进行移位,如:

  int i = 1, j = 0x80000000; //设int为32位

  i = i << 33; // 33 % 32 = 1 左移1位,i变成2

  j = j << 33; // 33 % 32 = 1 左移1位,j变成0,最高位被丢弃

  在用gcc编译这段程序的时候编译器会给出一个warning,说左移位数>=类型长度.那么实际上i,j移动的就是1位,也就是33%32后的余数.在gcc下是这个规则,别的编译器是不是都一样现在还不清楚.

  总之左移就是: 丢弃最高位,0补最低位

  再说右移,明白了左移的道理,那么右移就比较好理解了.

  右移的概念和左移相反,就是往右边挪动若干位,运算符是>>.

  右移对符号位的处理和左移不同,对于有符号整数来说,比如int类型,右移会保持符号位不变,例如:

  int i = 0x80000000;

  i = i >> 1; //i的值不会变成0x40000000,而会变成0xc0000000

  就是说,符号位向右移动后,正数的话补0,负数补1,也就是汇编语言中的算术右移.同样当移动的位数超过类型的长度时,会取余数,然后移动余数个位.

  负数10100110 >>5(假设字长为8位),则得到的是 11111101

  总之,在C中,左移是逻辑/算术左移(两者完全相同),右移是算术右移,会保持符号位不变.实际应用中可以根据情况用左/右移做快速的乘/除运算,这样会比循环效率高很多.

  例:C语言中左移<<表示乘以2,右移>>表示除以2,这是由计算机工作原理导致的!但是要是7,二进制数为0111,右移一位得3.5,但是右移之后二进制数变成0011,是3。不一样啊,怎模解释呢??

  移位操作符的两个操作数必须是整型的。整个移位表达式的值的类型也是整型的,而且,左移位操作符与右移位操作符的运算并不对称。0111右移一位是把最后一位的1去掉,左边补个0,得0011,转换为十进制是3,这是正确的。并不等同于除以2 。

转载于:https://www.cnblogs.com/kennyael/p/9786754.html

C语言------运算符和表达式相关推荐

  1. c语言的运算答案,C语言运算符与表达式的练习题答案.doc

    C语言运算符与表达式的练习题答案.doc C语言运算符与表达式的练习题单项选择题 1以下选项中,正确的 C 语言整型常量是( D ). A. 32L B. 510000 C. -1.00 D. 567 ...

  2. c语言表达式运算符,C语言运算符与表达式

    <C语言运算符与表达式>由会员分享,可在线阅读,更多相关<C语言运算符与表达式(18页珍藏版)>请在人人文库网上搜索. 1.2020/6/26,3,1,陈孝则,运算符和表达式, ...

  3. c语言等号运算符先计算右边,C语言运算符和表达式.ppt

    <C语言运算符和表达式.ppt>由会员分享,可在线阅读,更多相关<C语言运算符和表达式.ppt(29页珍藏版)>请在人人文库网上搜索. 1.运算符和表达式,夏涛,运算符与表达式 ...

  4. c语言运算符与表达式ppt,c语言运算符与表达式.ppt

    c语言运算符与表达式.ppt 第三讲 运算符与表达式 运算符与表达式 [例] 自增.自减运算符的用法与运算规则示例. /*程序功能:自增.自减运算符的用法与运算规则示例*/ main int x 6, ...

  5. c语言运算符和表达式说课,c语言运算符和表达式说课材料.ppt

    c语言运算符和表达式;;学习运算符,主要掌握以下4点:;;;;§3.1 算术表达式;;;;整除和求余数的特殊用处;;;;;// 连续的---表示前两个是对a的自减,最后的-表示减法运算;3.1.2 算 ...

  6. C语言为运算表达式添加括号,读书笔记-c语言-运算符与表达式

    1.算术运算符:+-*/% %要求参与运算的两个量必须是整型或字符型的,实型(float,double等)的数据不能做%运算. 算术表达式 运算符和数据可以组成运算的式子,称为表达式.举例:10+20 ...

  7. 第三章 C语言运算符,表达式,序列点,类型转换

    文章目录 赋值运算符 对象.左值.右值 算术运算符 关系运算符 逻辑运算符 备选拼写 iso646.h头文件 条件运算符 逗号运算符 表达式 语句 表达式语句 复合语句 迭代语句 选择语句 跳转语句 ...

  8. C语言——运算符与表达式

    知识点一:表达式 1)什么是表达式:在C语言中,一个或多个运算对象与零个或多个运算符组成表达式; 例: 100 5 + 10 a / b a * 10 / b + c 2)表达式的结果: printf ...

  9. 第三章 C语言运算符与表达式练习题

    第三章 运算符与表达式练习题 一.单项选择题 1.下列数据中属于"字符串常量"的是(  ).      A."a"      B.  {ABC}         ...

  10. C语言运算符与表达式课件,C语言课件(运算符和表达式).ppt

    C语言课件(运算符和表达式).ppt 运算符与表达式第二讲 运算符和表达式,引例 概念及分类 优先级和结合性 算术运算 关系运算 逻辑运算 位运算 赋值运算符 逗号运算符 条件运算符,引例,引例 问题 ...

最新文章

  1. python使用matplotlib可视化线图(line plot)、使用invert_yaxis函数将Y轴坐标反序(invert the y axis in matplotlib)
  2. Spring Task定时任务的配置和使用详解
  3. apache php mysql 开发_Wndows下Apache+php+Mysql环境的搭建及其涉及的知识(转)
  4. macOS Big Sur11.2发布候选版更新:修复蓝牙和显示连接问题
  5. jquery图片预加载+自动等比例缩放插件
  6. windox与ubuntu18.04安装clion及导入qt库
  7. Linux环境编程之文件I/O(二):文件的打开与关闭
  8. PhotoShop 2022安装教程(附安装包)
  9. Rayson API 框架分析系列之6: 客户端动态代理原理
  10. 你在读文学作品的时候也许从来没考虑这些问题
  11. 汽车电器设备与维修【1】
  12. 机器学习在美团配送系统的实践:用技术还原真实世界-笔记
  13. 2011软专高级程序语言T4(二维数组按一维数组访问)
  14. Android检测网络状态监听网络变化
  15. EXCEl2013 创建下拉菜单
  16. 百度地图,开启marker点拖拽,并监听拖拽后的坐标位置
  17. Ubuntu下jperf的安装
  18. Office Visio 2016安装
  19. 用java写2468游戏_自己写游戏——东渡教你用Java编写2048完整代码
  20. 实战项目:物流行业数据分析

热门文章

  1. 编译工具 之 ant
  2. linux进程 网络占用率,linux CPU SI软中断比较占用率比较大(网络解决方案)
  3. OpenCV+python:直方图的应用(一)
  4. Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈)
  5. usaco A game
  6. (一次性搞定)ORB_SLAM2地图保存与加载
  7. python刷题笔记怎么改_python面试题刷题笔记1 - 10
  8. linux代码动态分析软件,举例分析Linux动态库和静态库
  9. python实训心得2000_实训总结万能版2000字五篇
  10. python123注册需要输入真实姓名和学校吗_python-----作业完成--学校选课系统