【学习笔记】个人思考总结(陷阱)

一.数据类型关于char

      C语言中的char是用于声明单个字符的关键字。同时我们也可以用于数组的申请,但是这并没有完。它也可以存储整形数据,例如

#include<stdio.h>
int main(void){
	 char a[0];
	 
	 scanf("%d",&a[0]);
	 
	 printf("%d",a[0]);
	 
	 return 0;
} 

这是因为int和char在本质上一样,不过编译器会进行转换。

但是 由于char是8bit,所以它的范围是【-128,127】

二.算法小技巧--

   1.交换数值的三种方法:

      异或(^)      这个操作符的意思是不同为1,其余为0(二进制);

                            例如:1001 和1011  —>0010

                             对于一个数连续异或两次值不变

#include<stdio.h>
int main(void){
	
	   int a=5,t=a;
	   
	   a=a^a;
	   a=t^a;
	   
	   printf("%d",a);
	 
	  return 0;
} 

                             利用这个特性,就有以下操作:

 int a=5,t=12;
	   
	   a=a^t;
	   t=t^a;
	   a=a^t;
	   
	   printf("%d %d",a,t);
	 

        数学运算         这就是利用     a=(a+b)-a;

                                                       b=(a+b)-b; 

                         这就容易造成数据越界导致结果不准(不建议用

       中间值交换        这个可以说是最常用的算法了

 int a=5,t=12,temp;
	   
	   temp=a;
	   a=t;
	   t=temp;
	   
	   printf("%d %d",a,t);

  

三.常见的问题

1.有时候我们给多组字符串变量赋值时会出现一些问题,例如以下问题程序

   char a,b;
	   
	   scanf("%c",&a);
	   scanf("%c",&b);
	   
	   printf("%c %c",a,b);

我们会发现b无法打印出来,这是由于在给a赋值后的回车存入缓存区,在下次的b时被直接提取出来,所以为了给b附上值,我们应该清除缓存区

以下给出两种方法:

1.

scanf("%c",&a);
	   scanf(" %c",&b);

第一种在%c前加一个空格

2.

 scanf("%c",&a);
	   
	   getchar();
	   
	   scanf("%c",&b);

用getchar();清除缓存区

3.写题的时候尽可能用long long int

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值