C/C++相关概念和易错知识点(2)(负数取模、左右移)

本文概述了编程中的小数除法、取模操作注意事项、循环和分支语句的使用、printf和scanf函数的技巧、ASCII码值以及指针概念的基础知识,旨在帮助读者复习和理解这些容易忽视但重要的知识点。

前言:首先,我的博客主要记录的是部分容易遗忘,但是比较重要或是值得了解的知识点。很多基本概念我并不会阐述,所以它更适合用来复习;其次,这些知识点是从我自己的角度出发整理的,因此我认为的重点可能和你不同,有的内容可能不完整或有错误,希望大家多多包涵,如果能指出我的错误,我会非常感激!最后,我整理的知识点可能会比较琐碎,但在以后知识点多了之后我可能会进行整理。

1.小数除法

注意在进行小数除法的时候,两个相除的数至少有一个是小数,否则功能无法正常实现。在使用printf打印的时候默认打印小数后6位

0e7520a21c54411688dc0fb09fabc7bc.png​​

2. 取模操作

负数求模:负数求模的符号仅由第一个数的正负决定,第二个数的正负不影响取模的正负

10d4a5983d564b7989b917376ee03339.png取模操作适用范围:只能用于整型,浮点数不能取模

3.循环和分支语句中注意事项

(1)switch

switch语句中括号、case和default中选择的内容只能是整型或枚举类型,枚举类型可以看作特殊的常量,char类型也可以视作整型家族,因为本质上char在内存中存储的是它的ASCII码值,这个值算作一个整型。

(2)for、while、do while

for(表达式1;表达式2;表达式3)

在for的使用中要注意当执行表达式1后,会进行一次表达式2判断,为真后才进入for内部。虽然平时我们写代码意识不到这一步,因为没人会写出这么一段无用的代码,但是这个逻辑要清楚。

for、while内部执行次数比条件判断次数少1

do while循环一定是先执行do中的内容,再进行while判断,即使你发现一开始while中表达式的结果就为假。这也是区分while,for的关键部分。

do内部执行次数和while判断次数相同。

循环和分支的判断遵循0为假,非0为真,所以在判断时可以合理利用单目操作符和逻辑操作符简化

如!a相当于a==0

(3)go to

go to语句最好在需要连续跳出多个循环时使用,正常情况下不要用,能用其他方式解决的就不要用go to语句,因为这会使我们的代码逻辑变复杂。

4.区分连续赋值和逗号表达式的执行逻辑

连续赋值是从右向左的,靠右边的表达式的值依次向左附

逗号表达式是从左到右依次执行,逗号表达式的结果是最后一个表达式的结果,注意每个表达式都要执行

5.左移操作符和右移操作符细则区分

左移操作符执行规则:左边抛弃,右边补0。

因此对于负数来说,左移后就变成了正数(有且只有这一种可能)

右移操作符的执行规则就比左移操作符的要复杂,有两种操作方式;

(1)逻辑右移:左边用0填充,右边丢弃(类似于左移操作符)

(2)算数右移:左边用该值的原符号位填充,右边丢弃。这意味着在算数右移的规则下,负数右移后还是负数,而逻辑右移下,移后的数一定是正数。

对于绝大部分编译器来说,都是采用算数右移,仍有少部分编译器采用逻辑右移。

但是对于所有编译器来说,左移规则相同。这里一定要注意区分!

6.printf的重要操作技巧

(1)左右对齐

在打印多个数字时,难免会出现第一排是一位整数,第二排是两位甚至三位整数。如果不做任何处理,后续打印的数字会无法对齐,因此使用printf("%3d")或printf("%-3d"),3表示最小位宽,使打印的数字右对齐或左对齐,默认右对齐,前面加上负号变成左对齐

如果打印的位数超过你自己在前面%d间写的数字,则正常打印,但数字间的对齐效果受影响

打印字符串同理,注意空格也被视为字符

(2)限制小数位数

无论以%f还是%lf形式打印,输出的结果默认是6个小数位,用printf("%.2f")限制小数位,这里只会打印小数点后2位。

(2)和(1)可以合用,printf("%5.2f")的5用于对齐,.2用于限制小数位数,当然,你也可以加上负号让它变成左对齐

但要注意,小数点会被视为数字占掉一位

如31.41在使用printf("%5.2f")打印时最前面不会有空格

7.scanf读取字符和字符串规则

scanf在单独读取字符时,可读取空格

在读取字符串时,开头的空格自动跳过,在遇到下一处空格时自动停止

如"   Hello  World!"在读取时存入的是"Hello"开头无空格,后面的空格之后的内容不读取。

8.重要ASCII码值

字符A~Z从65~90

字符a~z从97~122

大写字母+32等于小写字母

数字0~9的ASCII码值是48~57

换行\n的ASCII码值是10

ASCII码值从0~31这32个字符不可打印,它们用于实现特定功能

9.重要占位符

%d 十进制整数

%c 字符

%s 字符串

%f 和%lf  浮点数

%p 指针

%u 无符号整数

%zd size_t类型

%o 八进制整数

%% 输出一个%

%x 十六进制整数

10.理解指针概念

首先我们要知道,CPU和内存之间有地址线连接,我们常说的64位平台即有64根地址线,32位平台则有32根地址线。每根地址线能够表示0和1,因此总共能储存2的64或32次方个地址。

以64位平台举例,每个地址由64个bit组成,即8个字节,因此储存64位平台的地址需要的指针变量的大小是8个字节。同理,32位平台需要4个字节。

严格来说,我们所说的指针是指针变量,真正的指针其实是地址,因此我们要区分日常用语和概念的定义的区别!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值