现在的位置: 首页 > 综合 > 正文

C 编程中遇到的几种易错情况

2019年03月05日 ⁄ 综合 ⁄ 共 991字 ⁄ 字号 评论关闭
第一种:变量的应用

先附上代码:
#include<stdio.h>

void main(void)
{
int a=10,b=20,c=30;
printf("%d %d %d\n",a+b+c,b=(c*2),c=c+b);
}
如果不事先在编译器中进行编译,你可否能说出这个函数输出的结果是什么吗?我在没有进行编译之前,算了一下,结果算错了,看看了书,才知道,这个输出语句的结果输出是这样子的:先计算c=c+b的值,即c=50,再计算b=(c*2)的值,此时的c值已经从原来的30变为50了,那么此时的b值就是100,最后算a+b+c的值,即160;所以该函数输出的结果为:160
100 50

第二种:位运算符和位运算
 代码:
#include<stdio.h>

int func(int x)
{
int c = 0;
while(x)
{
c++;
x = x & (x-1);
}
return c;
}

void main()
{
printf("%d\n",func(65));
}

首先,一定要能判别出func(x)函数内部 x = x &(x-1);语句中的“&”是运算符号是位运算符,说到这句话,可能有些人就要笑了,但是往往这种很基础的知识点才是我们最容易忽略的地方,所以当长时间没有用到的知识点偶尔遇到时,却不知其意,反而容易算错。。。那么根据位运算的知识点,上边的程序输出结果应该是:2
在此,我把常用的有关位运算的知识点做一小小的总结,方便以后查阅:
  1. &(按位“与”)运算规则是:0&0=0、0&1=0、1&0=0、1&1=1;按位“与”运算通常用来对某些位清0或保留某些位。
  2. |(按位“或”) 运算规则是:0|0=0、0|1=1、1|0=1、1|1=1;按位“或”运算通常用来对某些位置1.
  3. ^(按位“异或”) 运算规则是:0^0=0、0^1=1、1^0=1、1^1=0;按位“异或”运算通常用来是特定位翻转或保留原值。
  4. ~(按位“取反”)运算规则是:~0=1、~0=1;按位“取反”运算通常用来间接地构造一个数,以增强程序的可移植性。
  5. <<(“左移”)运算规则是:将操作对象各二进制位全部左移指定的位数,移出的高位丢弃,空出的低位补0.注意:若左移时丢弃的高位不包含1,则每左移一位,相当于给该数乘以2.
  6. >>(“右移”) 运算规则是:将操作对象各二进制位全部右移指定的位数,移出的低位丢弃,空出的高位补0.注意:每右移一位,相当于给该数除以2,并去掉小数。

抱歉!评论已关闭.