c++中易错的地方

1:scanf

int a;

int b;

scanf("%d-=%d",&a,&b);

printf("a=%d,b=%d",a,b);

在scanf中  a和b前面的&一定不能掉

在输入的时候,一定要严格的按照%d-=%d的格式写,比如这次就应该输入11-=12  11和12为a和b的int类型

2:内存的表示

物理内存的单元是“字节”

一个字节占8个位,如下图所示

0000 0000

0000 0000

0000 0000

0000 0000

0000 0000

1个字节的表示范围为

0000 0000(0)到1111 1111(256)

两个字节的表示范围为

0000 0000(0)到1111 1111(256*256)

3:变量的类型

整型

char -128到127

short

int

浮点型

float   4个字节

double  8个字节

赋值方式

float a = 12.34f   后面的f必须加

double a = 12.34

float对应的是%f  %.1f  结果保留一位小数

double对应的是%lf

给变量赋值的时候,可以用十进制,也可以用16进制,用16进制需要前面加0X

prinif中的%08X  表示是用16进制打印出来,凑够8位

当用scanf来接收用户输入的整数时,只能用int型变量,不能用short/char型

4:数组

1)数组在内存中的存储

char data[5] = {1,2,3,4,5};

数组在内存所占的空间为 类型所占空间(char占一个字节)*元素的个数(5) 5个字节

int arr[10]所占的空间就为4(int占4个字节)*10(这个数组的个数为10)  10个字节

2)在按F5调试的时候,只需要输入data(数组名)就可以查看数组所占的内存,不需要加&

3)数组的赋值

char a[] = {1,2,3,4,5}  //不用表名元素个数直接赋值

char a[5] = {1,2}  //赋值一部分

char a[3] = {1,2,3}  //全部赋值

5:字符

1)字符的存储

因为计算机上面只能存储0和1,所以想了一个办法,用数字来代替字符

65

当内存中存储了01000001时,它代表了字符串"A"

2)字符的打印方法

printf("%c",65);

printf("%c",'A');  //注意,必须用单引号  'A'

3)在键盘上所有字符用一个数字来表示,为此专门制定了一个表,成为ASSIC码表

A 65 a 97  空格为32  '0'为48 其实这个表没必要记,知道有这么个东西就行了,所以我就不写了

因为ASSIC码表中的大部分数字都比较小,所以字符用char类型的表示就行了

char str = 65;

char str = 'A';

注意 printf("%c",'str');这种形式只能打印一个字符,比如后面的参数为'str',则只能打印出r

4)转义字符  \

\n表示回车

\t表示Tab

\"双引号

\\反斜线

4)字符串数组

1:定义方法

char str[6] = {'h','e','l','l','0','\0'};

注意,字符串数组必须以'\0'或者0来结尾

我们通常用这种方式来定义

char str[6] = "hello";  通常会直接省略str数组的元素个数

char str[] = "hello";  系统会在后面自动补0

但是  str[5] = "hello" 这种定义方式是错误的,会提示“str”: 数组界限溢出

2:打印方式  %s

3:字符串数组在打印的时候,遇到'\0'或者0会自动结束输出,但是0后面的内容还是会存储在内存中

6:算数表达式的注意事项

1)在模运算(%)中,操作数不能是小数

2)在除法(/)运算中,整型相除的话结果去掉小数,只保留整数部分,浮点型相除则保留小数部分

3)解析加法运算

a = a + b;

①从a的内存中取出a的值,交给加法器

②从b的内存中取出b的值,交给加法器

③加法器开始运算,求得两数之和,存到输出(寄存器)中

④将加法器的输出值存到a的内存中

4)赋值表达式本身就是一个值

printf("%d",(a=10));  a=10本身就是一个值

5) a+= b-1   等价于   a = a + ( b - 1 )

6) ==通常用于整型 因为浮点型可能存在无限循环的情况,无准确的值

7:逻辑表达式

&&和||中  如果表达式左边判断成立,则会终止计算,比如下面的例子

① int a = 10;

int b = 9;

int c;

printf("%d",a>b||(c=4));  //当a>b成立的时候,直接返回真 c=4不会被运算,所以下面打印出来的c还是0

printf("%d",c);

② int a = 10;

int b = 9;

int c;

printf("%d",a

printf("%d",c);

逗号表达式

取逗号最后面的一个值,一般不会用这个表达式

8:位操作

unsigned char 打印的时候用%u

n1*16等同于  n1<<4

单bit操作(难点)

1):把某位设置为0(设置的是第五位)

如   181的二进制为10110101

首先我们得知道一个特殊的数字

1u <<5 为 00100000

然后对1u<<5的结果取反

为   11011111   (mask掩码)

然后让11011111 | 10110101

如下图

11011111

&

10110101

10010101(所获得的结果)

所以我们最后得出的结论为  m &= ~(u1<

2)把某位设置为1(设置的是第6位)

如 181的二进制为10110101

首先我们得知道一个特殊的数字

1u <<6 为 01000000

然后进行|操作

01000000

|

10110101

11110101(所得到的结果)

所以我们可以得到结论  m|=(u1<

3)判断某位是否为1

如   181的二进制为10110101

首先我们得知道一个特殊的数字

1u <<5 为 00100000

然后我们进行&操作

10110101

&

00100000

00100000(所得结果为真)

如果是第六位的话

10110101

&

01000000

00000000(所得结果为假)

所以我们可以得出结论

bool = m&(u1<

多bit操作(难点)

181的二进制为10110101  假设对bit2到bit4操作

1)清空多位为0

a &= ~(0X07 <<2)

0X07代表的是  00000111  即1*2

00000111左移二位得到 00011100

然后取反得到 11100011

然后    11100011

&

10110101

10100001

a &= ~(0X07 <<2)

2)读取2bit到4bit

先把10110101向右移两位

得到00101101

然后 00101101

&

00000111(0X07)

00000101(所得结果)

3)设置2bit到4bit都为1

a |= 0X007 <<2  具体的过程就不叙述了

设置2bit到4bit都为0

a &= 0X007 <<2  具体的过程就不叙述了

关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

[C语言中易错的地方(一)]http://www.zyiz.net/tech/detail-163815.html

c语言中local status6,C语言中易错的地方(一)相关推荐

  1. c语言常考易错知识点,C语言中易错点知识点拾遗

    C语言中易错点知识点拾遗 1. 首先,feof()是文件结束检测函数,如果没有结束,返回值是 0,结束了是 1 由于 feof(fp)返回 0 才 是没有结束,所以通常写成 while(!feof(f ...

  2. c语言中.和-区别,c语言中-和.的区别

    对于c语言中"->"和"."的区别总结如下: 1.A.B则A为对象或者结构体: 2.A->B则A为指针,->是成员提取,A->B是提取A ...

  3. 字符'0'到'9'在c语言中,/0在c语言中是什么意思?

    01 "\0"在c语言中代表"字符串结束符"."\0"的ASCII码为"0",也就是空字符:字符串总是以"\0 ...

  4. R语言中dim函数_R语言中的方差分析方法汇总

    方差分析,是统计中的基础分析方法,也是我们在分析数据时经常使用的方法.下面我总结一下R语言如何对常用的方差分析进行操作. 1. 方差分析的假定 上面这个思维导图,也可以看出,方差分析有三大假定:正态, ...

  5. c语言中bluetooth函数,C语言中的低功耗蓝牙-使用Bluez创建GATT服务器

    小编典典 我得到了运行BlueZ 5.31的示例GATT服务器(截至本文的最新信息): 我的环境: 作为来宾OS(版本14.04 32位操作系统)的 Vagrant Virtual Box Ubunt ...

  6. c语言中14 3,C语言中的单精度和双精度浮点型的区别!3.14是哪种?3.14159呢?

    3.14是单精度,3.14159是双精度. 两者区别如下: 一.指代不同 1.单精度:是指计算机表达实数近似值的一种方式. 2.双精度:此数据类型与单精度数据类型(float)相似,但精确度比floa ...

  7. c语言中O空字符,OC语言中字符串的使用

    可变字符串 //插入字符串 NSMutableString*string1 =[NSMutableStringstringWithString:@"字符串"]; [string1i ...

  8. C语言中:在头文件中使用static定义变量意味着什么?

    C语言中:在头文件中使用static定义变量意味着什么? 看到有一位同学在头文件中这么写: static const wchar_t* g_str1 = - static const wchar_t* ...

  9. C语言中,求三个数中最大数

    C语言中,求三个数中最大数 #include<stdio.h>//以下是进行正整数的最大之间的比较,其他类型只需进行相应的格式修改 int main(){int a,b,c,max;//定 ...

最新文章

  1. Extreme 交换机基础配置命令
  2. GetListToJson
  3. thinkphp5 图片压缩旋转_【好工具】在线免费无限制的PDF处理工具(转换、编辑、分割、合并、压缩)...
  4. android 自定义 进度条 旋转,Android_Android ProgressBar进度条使用详解,ProgressBar进度条,分为旋转进 - phpStudy...
  5. 使用Elasticsearch 构建 .NET 企业级搜索
  6. 一个sql生成hive日期维度表
  7. 最短路径——Floyd算法HDU Today(hdu2112)
  8. node mysql崩溃_为什么这个mysql错误会导致nodejs崩溃而不是去catch函数?
  9. ctf 抓捕赵德汉_2017年网络空间安全技术大赛部分writeup
  10. MySQL中CASE的使用
  11. 360网神防火系统 配置端口映射_IIS配置证书端口443无法访问
  12. html页面转换pdf.txt
  13. SpringBoot工程中,如果不继承spring-boot-starter-parent ,还可以怎么做到的版本管理?
  14. c语言抽签系统_抽签小程序(C语言随机数)
  15. LTE Cat-M1 物联网模块直接连接全球蜂窝网络
  16. 第一次软工作业(构建之法)
  17. 【日语】编程相关日语词汇
  18. 手把手写C++服务器(0):专栏文章-汇总导航【持续更新】
  19. 生成叠加高斯分布噪声的方波
  20. Laya---竖向滚动列表

热门文章

  1. SpringBoot2.x 整合 thumbnailator 图片处理
  2. qt之QCustomPlot与qchart初级应用-----绘制动态曲线
  3. js复选框之全选反选不选
  4. 电动汽车充电设备 标准化设计方案:160kW分体式双充接口充电柜
  5. 小票打印机切纸两次的问题
  6. 307页118万字智慧三甲医院弱电系统设计方案完整版
  7. Android体重计算器
  8. oracle清理死锁,在线等!1亿数据量大表delete操作死锁,紧急求助!
  9. 会声会影2023最新版v25.3.0.0视频剪辑软件
  10. 【视频学习】提高情商,改变人生的读心术