[C/C++]逼格提升-常见错误总结

15 篇文章 6 订阅

 

  •  个人主页:北·海
  •  🎐CSDN新晋作者
  •  🎉欢迎 👍点赞✍评论⭐收藏
  • ✨收录专栏:C/C++
  • 🤝希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,大家一起学习交流!🤗
  1. ++(自增运算符)和 --(自减运算符)的区别

<1>.若++在变量前 ,则先加后用,++在变量后则先用后加

int i =1;

printf("%d",i++); 输出为1

printf("%d",++i); 输出为2

<2>.若--在变量前 则先减后用,--在变量后则先用后减

int i =1;

printf("%d",i--); 输出为1

printf("%d",--i); 输出为0

2. a>b>c表达式的运算

#include <stdio.h>

void main() {

int a=5,b=4,c=3,d=2;

if(a>b>c)

printf(“%d\n”,d);

else if((c-1>=d)==1)

printf(“%d\n”,d+1);

else

printf(“%d\n”,d+2);

输出结果为3 ,先判断a>b的值为真 则a>b的值为1,判断1>c 显然为假 值为0

3. !x 等价于 x==0的理解

<1>.可以这样理解 ,布尔类型(bool)的值0为假,非零为真

<2.>!运算符为逻辑运算符中的取反运算符,真变假,假变真

<3>.不妨让x = 0,则!x相当于!0,其值为真,而x==0相当于 0==0(做判断),其值为真,很好理解

4. && 和 || 的截断运算

<1>.&&为与运算符 (有假则截断为假,不在执行后面的表达式)

int i =0;

int y=2;

int z;

z = x++ && ++y;

printf("x = %d,y=%d,z = %d",x,y,z);

输出为x=1,y = 1,z =0;

由于x++先用后加,加完之后为x=1,用时x=0,&&左边表达式为假,则不再执行右边的表达式,则y= 1,z=0;

<2>. ||为或表达式(若左边表达式为真,则不再执行右边的表达式,表达式为真)

int i =1;

int y=2;

int z;

z = x++ || ++y;

printf("x = %d,y=%d,z = %d",x,y,z);

结果为:x = 2,y=1,z=1

因为x++为用的x=1为真,则截断,不在执行后面,则y=1,z=1

5.函数定义时涉及的基本要素

<1>. 函数名,函数体,形式参数

6.进制的转义字符

<1>\ddd ddd表示1-3个八进制的数字。将ddd三个数字转换成十进制,十进制数对应的ASCAII就是结果, ddd 最多只支持三位数字,并且三位数字也不是任意的(每个数字不能大于8,一旦大于8它就不是八进制数了), 一旦大于等于八进制数 '/400 '(十进制256=8进制400就超过了ascall码的范围,编译器就会报错。另外大于三位, 或者遇到非八进制数字时则转换结束,直接取末尾数字。

<2>\Xdd dd表示2个十六进制数,

7.%[]的用法

<1>. 这个参数的意思的读入一个字符集合,[]是集合的标志,因此%[]特指读入此集合所限定的那些字符,比如%[A-Z]限定只能输入大写字母A-Z,一旦遇到不在此集合的字符便停止,如果集合的第一个字符为"^",这说明只能读取不在"^"后面集合的字符,即遇到"^"后面的字符便停止

8.static(静态储存类)的用法

<1>. static是用来修饰变量(全局变量和局部变量)或函数的关键词

<2>. static修饰局部变量时:局部变量被static修饰后生命周期将变得和整个程序一样长,但作用域没有改变,本质上是因为static修饰的局部变量的储存位置改变了,将原本应该存储在栈区的局部变量存储在静态区。静态区上数据存储的特点是,程序结束变量才被释放

<3>. static修饰全局变量时:全局变量是是在不同源文件中可以使用的,只不过需要先用extern外部声明一下,若用static修饰了全局变量,则该变量不能被其他源文件使用,全局变量是具有外部链接属性的,若用static修饰则把外部链接属性变成了内部链接属性,其他源文件不能使用

<4>. static修饰函数时:static修饰函数时其实和全局变量差不多,因为函数也具有外部链接属性,被static修饰后就不能被其他源文件使用了

9.自增运算符在逗号运算符中的使用

<1>. 看个例子:(b=2,a=5,b++,a+b);

这个的结果为3+5=8

它是计算完表达式才自增一,所以,当执行完b++时,这个表达式的值是b,当执行a+b的时候,这时候的b已经变成了(b+1),也就是说,是执行完b++这个表达式之后,就增一了,而不是在执行完这个逗号表达式再增一

10.二进制与十进制之间的转换

<1>. 十进制转二进制:每次用十进制数除以2,得到一个商和一个余数,再用商除以2,依此下去,直到商为0,然后将得到的余数倒序排列写出来

例子: 将十进制11转换为二进制数字

商 余数

11除以2 5 1

5除以2 2 1

2除以2 1 0

1除以2 0 1

将余数倒叙排列则为1011即为十进制11的二进制

<2>. 二进制转十进制:二进制数第0位的权值是2的0次方,第1位的权值是2的1次方……

例子:二进制1011转10进制

从右往左算,最右边为第0位,

2^0 *1 + 2^1*1 + 2^2*0 + 2^3*1=11

一下为从左往右算

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北·海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值