[开发资料] 操作符"<<"的原生意义是按位左移

[复制链接]
1319|10
 楼主| szt1993 发表于 2024-3-26 17:00 | 显示全部楼层 |阅读模式

  1. 1<<2

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

  1. 0000 0001   演变成      0000 0100

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

代码示例:

  1. #include <stdio.h>

  2. const char endl = '\n';

  3. class Console
  4. {
  5. public:
  6.     Console& operator <<(int i)
  7.     {
  8.         printf("%d\n",i);
  9.         return *this;
  10.     }
  11.     Console& operator << (char c)
  12.     {
  13.        printf("%c\n",c);
  14.        return *this;
  15.     }
  16.     Console& operator <<(const char* s)
  17.     {
  18.          printf("%s\n",s);
  19.          return *this;
  20.     }
  21.     Console& operator << (double d)
  22.     {
  23.        printf("%f\n",d);
  24.        return *this;
  25.     }
  26. };

  27. Console cout;

  28. int main()
  29. {
  30.      cout<<1 << endl;
  31.      cout<<"TXP"<<endl;

  32.      double a = 0.1;
  33.      double b = 0.2;

  34.      cout << a + b <<endl;

  35.      return 0;
  36. }


运行结果:

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


  3. TXP


  4. 0.300000


从上面我们可以看到,不直接使用printf函数去打印这个值,这个以前在书上,都是直接讲解把数值说送到输出流中去,但是你一开始学习cout函数(或者说你还没有接触到对象的时候,根本不明白这什么意思);如果进行了左移的重载之后,那么程序将产生神奇的变化,所以在 main() 中不用 printf() 和格式化字符串 '\n' 了,因为编译器会通过重载的机制会为我们选择究竟使用哪一个重载机制。
中国龙芯CDX 发表于 2024-4-10 11:00 | 显示全部楼层
左移运算非常简洁,尤其是编写流水灯的时候

评论

很形象  发表于 2024-5-17 08:17
小夏天的大西瓜 发表于 2024-4-11 16:21 | 显示全部楼层
左移和右移对于IO来说操作非常方便
jf101 发表于 2024-4-14 14:27 | 显示全部楼层
左右移位对于位域运算也很实用
小小蚂蚁举千斤 发表于 2024-4-15 10:02 | 显示全部楼层
重载左移操作符,将变量或者常量左移到一个对象中,这个使用非常不错
OKAKAKO 发表于 2024-4-19 18:43 | 显示全部楼层
1<<2它的意义是将整数1按位左移2位,移位高速快捷的使用
星辰大海不退缩 发表于 2024-4-21 12:26 | 显示全部楼层
重载左移操作符,将变量或者常量左移到一个对象中,这个还是比较实用的
forgot 发表于 2024-5-17 08:17 | 显示全部楼层
这些符号都要注意优先级
LOVEEVER 发表于 2024-5-21 09:49 | 显示全部楼层
左右移位其实是快速方便运行
 楼主| szt1993 发表于 2024-7-22 13:20 | 显示全部楼层
中国龙芯CDX 发表于 2024-4-10 11:00
左移运算非常简洁,尤其是编写流水灯的时候

确实是,直接流水灯就好
您需要登录后才可以回帖 登录 | 注册

本版积分规则

350

主题

3021

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部