打印
[开发资料]

操作符"<<"的原生意义是按位左移

[复制链接]
997|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
szt1993|  楼主 | 2024-3-26 17:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

1<<2

它的意义是将整数1按位左移2位,即:

0000 0001   演变成      0000 0100

重载左移操作符,将变量或者常量左移到一个对象中

代码示例:

#include <stdio.h>

const char endl = '\n';

class Console
{
public:
    Console& operator <<(int i)
    {
        printf("%d\n",i);
        return *this;
    }
    Console& operator << (char c)
    {
       printf("%c\n",c);
       return *this;
    }
    Console& operator <<(const char* s)
    {
         printf("%s\n",s);
         return *this;
    }
    Console& operator << (double d)
    {
       printf("%f\n",d);
       return *this;
    }
};

Console cout;

int main()
{
     cout<<1 << endl;
     cout<<"TXP"<<endl;

     double a = 0.1;
     double b = 0.2;

     cout << a + b <<endl;

     return 0;
}


运行结果:

root@txp-virtual-machine:/home/txp# ./a.out
1


TXP


0.300000


从上面我们可以看到,不直接使用printf函数去打印这个值,这个以前在书上,都是直接讲解把数值说送到输出流中去,但是你一开始学习cout函数(或者说你还没有接触到对象的时候,根本不明白这什么意思);如果进行了左移的重载之后,那么程序将产生神奇的变化,所以在 main() 中不用 printf() 和格式化字符串 '\n' 了,因为编译器会通过重载的机制会为我们选择究竟使用哪一个重载机制。

使用特权

评论回复
沙发
中国龙芯CDX| | 2024-4-10 11:00 | 只看该作者
左移运算非常简洁,尤其是编写流水灯的时候

使用特权

评论回复
评论
forgot 2024-5-17 08:17 回复TA
很形象 
板凳
小夏天的大西瓜| | 2024-4-11 16:21 | 只看该作者
左移和右移对于IO来说操作非常方便

使用特权

评论回复
地板
jf101| | 2024-4-14 14:27 | 只看该作者
左右移位对于位域运算也很实用

使用特权

评论回复
5
小小蚂蚁举千斤| | 2024-4-15 10:02 | 只看该作者
重载左移操作符,将变量或者常量左移到一个对象中,这个使用非常不错

使用特权

评论回复
6
OKAKAKO| | 2024-4-19 18:43 | 只看该作者
1<<2它的意义是将整数1按位左移2位,移位高速快捷的使用

使用特权

评论回复
7
星辰大海不退缩| | 2024-4-21 12:26 | 只看该作者
重载左移操作符,将变量或者常量左移到一个对象中,这个还是比较实用的

使用特权

评论回复
8
forgot| | 2024-5-17 08:17 | 只看该作者
这些符号都要注意优先级

使用特权

评论回复
9
LOVEEVER| | 2024-5-21 09:49 | 只看该作者
左右移位其实是快速方便运行

使用特权

评论回复
10
szt1993|  楼主 | 2024-7-22 13:20 | 只看该作者
中国龙芯CDX 发表于 2024-4-10 11:00
左移运算非常简洁,尤其是编写流水灯的时候

确实是,直接流水灯就好

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

283

主题

2334

帖子

5

粉丝