C/C++小技巧与冷知识

        在这篇文章中,我会介绍几个很少人知道的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;

        好的,以上就是全部内容,如果喜欢的话,不要忘了一键三连哦!关注我,了解更多知识!

  • 21
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 31
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值