• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

C/C++小和冷知识

武飞扬头像
hcy15388959551
帮助1

        在这篇文章中,我会介绍几个很少人知道的C/C 冷知识与小技巧,还有一些可以提高自己在公司的不可替代性的小知识(别人看不懂)。以下都是C/C 通用,可以在自己的编译器中都试一试。

1.数组下标

        调用数组元素时,要用下标。大部分人肯定是这样写的:

  1.  
    int a[10]={0,1,2,3,4,5,6,7,8,9},x;
  2.  
    x=a[3];

        其实,数组的下标可以和数组名调换一下位置,如下:

  1.  
    int a[10]={0,1,2,3,4,5,6,7,8,9},x;
  2.  
    x=3[a];//等价于 x=a[3];

2.大括号与中括号

        其实,早期的键盘打不出“[”、“]”、“{”和“}”。所以,C/C 可以用“<%”代替“{”,“%>”代替“}”,“<:”代替“[”,“:>”代替“]”。

        例:(C)

  1.  
    #include<stdio.h>
  2.  
    int main()
  3.  
    {
  4.  
    int a[10]={0,1,2,3,4,5,6,7,8,9};
  5.  
    printf("%d",a[3]);
  6.  
    return 0;
  7.  
    }

        可以改为:

  1.  
    #include<stdio.h>
  2.  
    int main()
  3.  
    <%
  4.  
    int a<:10:>=<%0,1,2,3,4,5,6,7,8,9%>;
  5.  
    printf("%d",a<:3:>);
  6.  
    return 0;
  7.  
    %>

        这是不会报错的,C 同理:

  1.  
    #include<iostream>
  2.  
    using namespace std;
  3.  
    int main()
  4.  
    {
  5.  
    int a[10]={0,1,2,3,4,5,6,7,8,9,0};
  6.  
    cout<<a[3];
  7.  
    return 0;
  8.  
    }

        可以改为:

  1.  
    #include<iostream>
  2.  
    using namespace std;
  3.  
    int main()
  4.  
    <%
  5.  
    int a<:10:>=<%0,1,2,3,4,5,6,7,8,9,0%>;
  6.  
    cout<<a<:3:>;
  7.  
    return 0;
  8.  
    %>

3.sizeof

        很多人都认为“sizeof”是函数,需要写成:

  1.  
    int a=666,sz;
  2.  
    sz=sizeof(a);

        其实不然,“sizeof”也是一个单目运算符,可以写成:

  1.  
    int a=666,sz;
  2.  
    sz=sizeof a;

        与上面的语句是等价的,两种写法都可以。

4. 变量的乘法(位运算)

        大家平时要将变量乘2,再除以2,再乘以10(虽然有很多无用功,但这里为了多介绍几个,就这样了),肯定是用的以下语句:

  1.  
    a*=2;
  2.  
    a/=2;
  3.  
    a*=10;

        但是,如果想让别人看不懂,却很简单、效果相同,应该使用以下代码:

  1.  
    a<<=1;//等价于 a*=2;
  2.  
    a>>=1;//等价于 a/=2;
  3.  
    a=(a<<1) (a<<3);//等价于 a*=10;

5.交换两个变量的值(位运算)

        大家要交换两个变量的值,肯定是用:

  1.  
    int a=6,b=8;
  2.  
    int c=a;
  3.  
    a=b;
  4.  
    b=c;

        或者是使用C 中自带的函数“swap()”:

  1.  
    int a=6,b=8;
  2.  
    swap(a,b);

        可是,交换这事,你能自己写一串代码,不用第三个变量,就能实现吗?(你可以先思考一下,在看下面的答案。提示:用位运算)

        代码如下:

  1.  
    int a=6,b=8;
  2.  
    a^=b;
  3.  
    b^=a;
  4.  
    a^=b;

6.十进制转二进制(位运算)

        这个内容是个干货,之前的内容可有可无,但现在这个是有现实作用的。大家如果要十进制转二进制,是不是要这样写:

  1.  
    int decimal=123456,binary=0,base=1;
  2.  
    while(decimal>0)
  3.  
    {
  4.  
    binary =(decimal % 2)*base;
  5.  
    decimal/=2;
  6.  
    base*=10;
  7.  
    }
  8.  
    //最后结果是binary的值

        但是,我们可以用简便地位运算来写。(由于要去掉前导零,这里使用了字符串,C记得添加头文件<string.h>,C 记得添加头文件<string>)

  1.  
    int a=123456,i;
  2.  
    string binary="";
  3.  
    for(i=31;i>=0;i--) binary =char(a>>i&1) '0';
  4.  
    i=0;
  5.  
    while(binary[i]=='0')
  6.  
    {
  7.  
    binary.erase(i,1);
  8.  
    i ;
  9.  
    }
  10.  
    if(binary.empty()) binary="0";

        看上去复杂,其实主要部分就是那个for循环。

7.判断≠(!=)(位运算)

        一般判断两个变量是否相等,用以下代码就可以了:

  1.  
    int a=6,b=8;
  2.  
    if(a!=b)
  3.  
    {
  4.  
    //执行语句
  5.  
    }

        但是我们也可以用异或(^)来判断

  1.  
    int a=6,b=8;
  2.  
    if(a^b)
  3.  
    {
  4.  
    //执行语句
  5.  
    }

        上面两句话是等价的(但是下面的少一个字符。。。)

8.int转char(位运算)

        一般一个一位数转字符(char),就用以下代码:

  1.  
    int a=6;
  2.  
    char b=6 '0';

        但是我们也可以使用位运算:

  1.  
    int a=6;
  2.  
    char b=a^48//等价于 char b=a '0'; 或 char b=a 48;

        这个位运算有一个好处,就是int转char,还是char转int,都是^48,下面是char转int的一个例子:

  1.  
    char a='6';
  2.  
    int b=a^48//等价于 int b=a-'0'; 或 int b=a-48;

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgggehj
系列文章
更多 icon
同类精品
更多 icon
继续加载