在这篇文章中,我会介绍几个很少人知道的C/C++冷知识与小技巧,还有一些可以提高自己在公司的不可替代性的小知识(别人看不懂)。以下都是C/C++通用,可以在自己的编译器中都试一试。
1.数组下标
调用数组元素时,要用下标。大部分人肯定是这样写的:
int a[10]={0,1,2,3,4,5,6,7,8,9},x;
x=a[3];
其实,数组的下标可以和数组名调换一下位置,如下:
int a[10]={0,1,2,3,4,5,6,7,8,9},x;
x=3[a];//等价于 x=a[3];
2.大括号与中括号
其实,早期的键盘打不出“[”、“]”、“{”和“}”。所以,C/C++可以用“<%”代替“{”,“%>”代替“}”,“<:”代替“[”,“:>”代替“]”。
例:(C)
#include<stdio.h>
int main()
{
int a[10]={0,1,2,3,4,5,6,7,8,9};
printf("%d",a[3]);
return 0;
}
可以改为:
#include<stdio.h>
int main()
<%
int a<:10:>=<%0,1,2,3,4,5,6,7,8,9%>;
printf("%d",a<:3:>);
return 0;
%>
这是不会报错的,C++同理:
#include<iostream>
using namespace std;
int main()
{
int a[10]={0,1,2,3,4,5,6,7,8,9,0};
cout<<a[3];
return 0;
}
可以改为:
#include<iostream>
using namespace std;
int main()
<%
int a<:10:>=<%0,1,2,3,4,5,6,7,8,9,0%>;
cout<<a<:3:>;
return 0;
%>
3.sizeof
很多人都认为“sizeof”是函数,需要写成:
int a=666,sz;
sz=sizeof(a);
其实不然,“sizeof”也是一个单目运算符,可以写成:
int a=666,sz;
sz=sizeof a;
与上面的语句是等价的,两种写法都可以。
4. 变量的乘法(位运算)
大家平时要将变量乘2,再除以2,再乘以10(虽然有很多无用功,但这里为了多介绍几个,就这样了),肯定是用的以下语句:
a*=2;
a/=2;
a*=10;
但是,如果想让别人看不懂,却很简单、效果相同,应该使用以下代码:
a<<=1;//等价于 a*=2;
a>>=1;//等价于 a/=2;
a=(a<<1)+(a<<3);//等价于 a*=10;
5.交换两个变量的值(位运算)
大家要交换两个变量的值,肯定是用:
int a=6,b=8;
int c=a;
a=b;
b=c;
或者是使用C++中自带的函数“swap()”:
int a=6,b=8;
swap(a,b);
可是,交换这事,你能自己写一串代码,不用第三个变量,就能实现吗?(你可以先思考一下,在看下面的答案。提示:用位运算)
代码如下:
int a=6,b=8;
a^=b;
b^=a;
a^=b;
6.十进制转二进制(位运算)
这个内容是个干货,之前的内容可有可无,但现在这个是有现实作用的。大家如果要十进制转二进制,是不是要这样写:
int decimal=123456,binary=0,base=1;
while(decimal>0)
{
binary+=(decimal % 2)*base;
decimal/=2;
base*=10;
}
//最后结果是binary的值
但是,我们可以用简便地位运算来写。(由于要去掉前导零,这里使用了字符串,C记得添加头文件<string.h>,C++记得添加头文件<string>)
int a=123456,i;
string binary="";
for(i=31;i>=0;i--) binary+=char(a>>i&1)+'0';
i=0;
while(binary[i]=='0')
{
binary.erase(i,1);
i++;
}
if(binary.empty()) binary="0";
看上去复杂,其实主要部分就是那个for循环。
7.判断≠(!=)(位运算)
一般判断两个变量是否相等,用以下代码就可以了:
int a=6,b=8;
if(a!=b)
{
//执行语句
}
但是我们也可以用异或(^)来判断
int a=6,b=8;
if(a^b)
{
//执行语句
}
上面两句话是等价的(但是下面的少一个字符。。。)
8.int转char(位运算)
一般一个一位数转字符(char),就用以下代码:
int a=6;
char b=6+'0';
但是我们也可以使用位运算:
int a=6;
char b=a^48//等价于 char b=a+'0'; 或 char b=a+48;
这个位运算有一个好处,就是int转char,还是char转int,都是^48,下面是char转int的一个例子:
char a='6';
int b=a^48//等价于 int b=a-'0'; 或 int b=a-48;
好的,以上就是全部内容,如果喜欢的话,不要忘了一键三连哦!关注我,了解更多知识!