C程序设计(3)-运算、运算符优先级、转义字符

运算:

  取余运算%:两侧必须为整型数,x%10:得到x的个位数;

  除法运算/:任意两整数相除,结果为整数;两边有一个为浮点数,结果为浮点数;

  x/(10^(n-1))%10:得到x对应的n位数(n:个、十、百、千、万…),对应代码:{(x/(int)(pow(10,n-1))%10;};

  log10(x)+1:得到x的位数,对应代码:{(int)log10(x)+1;};

  截取数num第low~high位:{for(int i = 0; i < high - low +1; i++){res += num / (int)pow(10, low - 1 + i) % 10 * (int)pow(10, i);}}。

运算符优先级:

  初级运算符( )、[ ]、->、.  高于  单目运算符  高于  算数运算符(先乘除后加减)  高于  关系运算符  高于  逻辑运算符(不包括!)  高于  条件运算符  高于  赋值运算符  高于  逗号运算符,位运算符的优先级比较分散。

  除了赋值运算符、条件运算符、单目运算符三类的平级运算符之间的结合顺序是从右至左,其他都是从左至右。

  


优先级


运算符


名称或含义


使用形式


结合方向


说明


1


[]


数组下标


数组名[常量表达式]


左到右


--


()


圆括号


(表达式)/函数名(形参表)


--


.


成员选择(对象)


对象.成员名


--


->


成员选择(指针)


对象指针->成员名


--


2


-


负号运算符


-表达式


右到左


单目运算符


~


按位取反运算符


~表达式


++


自增运算符


++变量名/变量名++


--


自减运算符


--变量名/变量名--


*


取值运算符


*指针变量


&


取地址运算符


&变量名


!


逻辑非运算符


!表达式


(类型)


强制类型转换


(数据类型)表达式


--


sizeof


长度运算符


sizeof(表达式)


--


3


/



表达式/表达式


左到右


双目运算符


*



表达式*表达式


%


余数(取模)


整型表达式%整型表达式


4


+



表达式+表达式


左到右


双目运算符


-



表达式-表达式


5


<<


左移


变量<<表达式


左到右


双目运算符


>>


右移


变量>>表达式


6


>


大于


表达式>表达式


左到右


双目运算符


>=


大于等于


表达式>=表达式


<


小于


表达式<表达式


<=


小于等于


表达式<=表达式


7


==


等于


表达式==表达式


左到右


双目运算符


!=


不等于


表达式!= 表达式


8


&


按位与


表达式&表达式


左到右


双目运算符


9


^


按位异或


表达式^表达式


左到右


双目运算符


10


|


按位或


表达式|表达式


左到右


双目运算符


11


&&


逻辑与


表达式&&表达式


左到右


双目运算符


12


||


逻辑或


表达式||表达式


左到右


双目运算符


13


?:


条件运算符


表达式1?

表达式2: 表达式3


右到左


三目运算符


14


=


赋值运算符


变量=表达式


右到左


--


/=


除后赋值


变量/=表达式


--


*=


乘后赋值


变量*=表达式


--


%=


取模后赋值


变量%=表达式


--


+=


加后赋值


变量+=表达式


--


-=


减后赋值


变量-=表达式


--


<<=


左移后赋值


变量<<=表达式


--


>>=


右移后赋值


变量>>=表达式


--


&=


按位与后赋值


变量&=表达式


--


^=


按位异或后赋值


变量^=表达式


--


|=


按位或后赋值


变量|=表达式


--


15



逗号运算符


表达式,表达式,…


左到右


--

  同一优先级的运算符,运算次序由结合方向所决定。

  简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符

转义字符:

  


转义字符


意义


ASCII码值(十进制)


\a


响铃(BEL)


007


\b


退格(BS) ,将当前位置移到前一列


008


\f


换页(FF),将当前位置移到下页开头


012


\n


换行(LF) ,将当前位置移到下一行开头


010


\r


回车(CR) ,将当前位置移到本行开头


013


\t


水平制表(HT) (跳到下一个TAB位置)


009


\v


垂直制表(VT)


011


\\


代表一个反斜线字符‘‘\‘


092


\‘


代表一个单引号(撇号)字符


039


\"


代表一个双引号字符


034


\?


代表一个问号


063


\0


空字符(NUL)


000


\ddd


1到3位八进制数所代表的任意字符


三位八进制


\xhh


十六进制所代表的任意字符


十六进制

  注:\xhh 十六进制转义不限制字符个数,如: ‘\x000000000000F‘ == ‘\xF‘。

 

\r、\r\n、\t的区别:

  \n 软回车
        在Windows 中表示换行且回到下一行的最开始位置,相当于Mac OS 里的 \r 的效果;
        在Linux、unix 中只表示换行,但不会回到下一行的开始位置。
  \r 软空格
        在Linux、unix 中表示返回到当行的最开始位置;
        在Mac OS 中表示换行且返回到下一行的最开始位置,相当于Windows 里的 \n 的效果。
  \t 跳格(移至下一列)

  它们在双引号或定界符表示的字符串中有效,在单引号表示的字符串中无效;

  \r\n 一般一起用,用来表示键盘上的回车键,也可只用 \n;
  \t表示键盘上的“TAB”键。

  文件中的换行符号:
    linux,unix:\r\n
    windows:\n   
    Mac OS:\r

“回车”(carriage return)和“换行”(line feed)概念的来历和区别:

  在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的机器,每秒钟可以打10个字符。但是存在每打完一行换行时需要0.2秒的问题,0.2秒正好可以打两个字符。如果在这0.2秒中,又有新的字符传过来,那么这个字符将丢失。研制人员在每行后面加两个表示结束的字符解决了这个问题。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。这就是“换行”和“回车”的来历,从它们的英语名字上也可以看出一二。随着计算机的发明,这两个概念也被引入到了计算机。彼时存储器价格高昂,一些科学家认为在每行结尾加两个字符过于浪费,加一个就可以,于是出现了分歧。Unix系统里,每行结尾只有“<换行>”,即“\n”;Windows系统里面,每行结尾是“<换行><回车>”,即“\n\r”;Mac系统里,每行结尾是“<回车>”,即“\r”。直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。

  c语言编程时(windows系统):

    \r 就是return,回到本行行首,这就会把这一行以前的输出覆盖掉,如:
      int main() {
      cout << "out" << "\r"
<< "put" ;
      }

    最后只显示put而out被覆盖了;

    \n 是回车+换行,把光标先移到行首然后再换到下一行,如:

      int main() {

      cout <<
"out" << "\n" << "put" ;
      }
    则显示:

    out
    put

原文地址:https://www.cnblogs.com/zimsky/p/12651178.html

时间: 2024-11-08 13:33:13

C程序设计(3)-运算、运算符优先级、转义字符的相关文章

运算符优先级

1        算术运算符       单目 >双目 >三目 2        关系运算符 3        逻辑运算符      &&高于||      !算术还高高 一共有十五个优先级: 1   ()  []  .  -> 2   !  ~   -(负号) ++  --   &(取变量地址)*   (type)(强制类型)    sizeof 3   * / % 4   + - 5   >> << 6   > >= <

运算符优先级问题

设计一个函数计算2n+1: int func(int n) { return n << 1 + 1; } 这个函数得到的结果是4*n. 使用左移一位代替乘以2的运算,是很好的方法,但在C/C++中"+"运算符优先级高于"<<",因此会先进行加法运算再左移两位,得到结果4*n. 正确写法是: int func(int n) { return (n << 1) + 1; }

比较++和+的运算符优先级

比较++和+的运算符优先级 1.题目    看下方代码,结果为: /** * @Title:CalNum.java * @Package:com.you.user.util * @Description:比较运算符优先级 * @author:Youhaidong(游海东) * @date:2014-7-23 下午9:54:31 * @version V1.0 */ package com.you.user.util; /** * 类功能说明 * 类修改者 修改日期 * 修改说明 * <p>Ti

Java运算符优先级(转)

Java运算符优先级 序列号 符号 名称 结合性(与操作数) 目数 说明 1 . 点 从左到右 双目   ( ) 圆括号 从左到右     [ ] 方括号 从左到右     2 + 正号 从右到左 单目   - 负号 从右到左 单目   ++ 自增 从右到左 单目 前缀增,后缀增 - - 自减 从右到左 前缀减,后缀减 ~ 按位非/取补运算 从右到左 单目   ! 逻辑非 从右到左 单目 “!”不可以与“=”联用 3 * 乘 从左到右 双目   / 除 从左到右 双目 整数除法:取商的整数部分,

JavaScript的位运算符、赋值运算符、其他运算符、三元运算符、运算符优先级

一. 位运算符 在一般的应用中,我们基本上用不到位运算符.虽然,它比较基于底层,性能和速度会非常好,而就是因为比较底层,使用的难度也很大,底层运算是转换成二进制进行运算的. 位运算符有七种,分别是:位非 NOT(~).位与 AND(&).位或 OR(|).位异或 XOR(^).左移(<<).有符号右移(>>).无符号右移(>>>). var box = ~25; //-26 var box = 25 & 3; //1 var box = 25 |

运算符优先级常识

引用:http://www.cnblogs.com/fengkuangIT/p/4423437.html 1        算术运算符       单目 >双目 >三目 2        关系运算符 3        逻辑运算符      &&高于||      !算术还高高 一共有十五个优先级: 1   ()  []  .  -> 2   !  ~   -(负号) ++  --   &(取变量地址)*   (type)(强制类型)    sizeof 3   *

PHP中运算符优先级

运算符优先级指定了两个表达式绑定得有多“紧密”.例如,表达式 1 + 5 * 3 的结果是 16 而不是 18 是因为乘号(“*”)的优先级比加号(“+”)高.必要时可以用括号来强制改变优先级.例如:(1 + 5) * 3 的值为 18. 如果运算符优先级相同,那运算符的结合方向决定了该如何运算.例如,"-"是左联的,那么 1 - 2 - 3 就等同于 (1 - 2) - 3 并且结果是 -4. 另外一方面,"="是右联的,所以 $a = $b = $c 等同于 $

【C知识点】C 运算符优先级和结合性y

1.C语言的运算符优先级有15个,如下图所示. 优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右 调用函数,数组 结构体成员选择符 () 圆括号 (表达式)/函数名(形参表)   . 成员选择(对象) 对象.成员名   -> 成员选择(指针) 对象指针->成员名   2 - 负号运算符 -表达式 右到左 单目运算符 优先级别仅此前者 (类型) 强制类型转换 (数据类型)表达式   ++ 自增运算符 ++变量名/变量名++ -- 自减运算符

c/c++系列的运算符优先级总结

经常写程序的时候,遇到运算符优先级的问题,令我汗颜的是,查书的次数挺多的……狠狠心,总结下.不过还要结合大量的编程实践来深入脑海. 1.首先永远忘不了的是,逗号运算符级别最低,毫无争议的还有()括起来的,人工设定了最高优先级,先算括号里的. 2.非人为的,就是四个,函数调用(),[]数组下标,点运算符,间接->运算符.他们是优先级最高的,从左到右.拿->记忆结合性 3.还有最起码知道,所有的单目运算符具有相同级别的优先级,记住是所有的.且记住都是从右到左 比如:正负号+i和-i,自增自减++i