C++ 按位左移/右移运算符(<<、>>)的重载的问题。

我希望实现一组二进制数的循环移动,比如 1001左移一次后变成0011 想使用运算符的重载,编译时提示需要至少一个类类型的数据 也就是说必须要有类才行,这就搞不懂了。请大神给个例子重载一下位操作运算符,谢了!

第1个回答  2016-10-17

位移运算符不需要重载。

#include<iostream>

using namespace std;
int main()
{
    int x=0x3;
    x=x<<1;
    cout<<x<<endl;
    return 0;
}

追问

不重载怎么实现循环左移或者右移呢?还有 在c++中怎么在运行的时候输入2进制?或者有什么格式可以快速以2进制显示某个10进制数?

追答

<< 作为运算符 在c/c++里就是定义成位移运算符。你可以找本c++的书,阅读里面有关运算符的章节。虽然我给的代码里面显示的是16进制,程序内部还是以二进制进行位移操作。

追问

我知道他是在内部以2进制形式操作的 但是并不会达成我想要的效果吧

大神 << 和>>是允许 重载的 我很想知道它是怎么重载的 能给我说下么

追答

我不知道你要的是什么效果,如果是位移,上面的代码已经实现了。如果是要显示输出二进制,那只要修改一下输出设置就可以了。


下面是运算符<<重载的例子

#include<iostream>
using namespace std;

class T
{
public:
    int i;
    friend ostream&  operator<<(ostream& out, const T& s);
};

ostream&  operator<<(ostream& out, const T& s)
{
    cout<<s.i;
    return out;
}

int main()
{
    T a;
    a.i = 6;
    cout<<a;
return 0;
}

追问

我想要的是循环移位 就是比如1100
左移一次后是1001 再来一次是0011 然后是0110然后1100依次类推

操作这个过程的代码已经想好了 就是不知道格式

追答x=x<<1;

执行一次,x的值就左移一位,要移动几位就执行几次。

追问

好吧😓 你还是没理解我的意思。。 一个数他2进制如果是1001左移一次不应该是10010么?可我是想让他变成0011,这两者不一样吧,要是不用重载就能实现 我还费那事重载他干嘛!
我还是写个普通函数吧。。😌不重载这个了

不过还是谢你啦😄

本回答被提问者和网友采纳

C \/ C ++中的左移和右移运算符
左移1(如 1 << 1)和右移1(如 1 >> 1)的运算结果,对于正数,分别等于2的幂次方乘以第一个数和第一数除以2的幂次方。这在正数的位移情况下是有效的。总的来说,左移和右移运算符在C \/ C++中是基础且重要的,但必须谨慎使用,以避免潜在的数值不稳定性。在实际编程中,理解这些运算符...

c语言,c++,哪些运算符不能重载
c语言没有重载的概念,重载是C++的内容 c++运算符:算术运算符:+,-,*,\/,%,++,--;位操作运算符:&,|,~,^(位异或),<<(左移),>>(右移)逻辑运算符:!,&&,||;比较运算符:<,>,>=,<=,==,!=;赋值运算符:=,+=,-=,*=,\/=,%=,&=,|=,^=,<<=,>>=;其他运算符:...

C语言中算术运算符优先级的问题
另外在C语言里 没有前置后置之分 因为++ -- 是右结合所以 右侧优先运算 表现为 "后置优先级比较高" 的假象 前置和后置的区分是因为运算符重载而后加入C++的 接下来是算术运算符,*、\/、%的优先级当然比+、-高了。移位运算符紧随其后。其次的关系运算符中,< <= > >=要比 == !=高一个级...

关于c++中,左值和右值问题
<< 左移运算符 >> 右移运算符 6级优先级 左结合 <、<=、>、>= 关系运算符 7级优先级 左结合 == 等于运算符 != 不等于运算符 8级优先级 左结合 & 按位与运算符 9级优先级 左结合 ^ 按位异或运算符 10级优先级 左结合 | 按位或运算符 11级优先级 左结合 && 逻辑与运算符 ...

C语言中 移位 和 按位 和 +-*\/ 的优先级是怎么样的
<<= 左移赋值 >>= 右移赋值 &= 位逻辑与赋值 |= 位逻辑或赋值 ^= 位逻辑异或赋值 上面的十个复合赋值运算符中,后面五个我们到以后位运算时再说明。 那么看了上面的复合赋值运算符,有人就会问,到底Total=Total+3;与Total+=3;有没有区别?答案是有的,对于A=A+1,表达式A被计算了两次,对于复合运算符A...

C++位运算,位取反,位左移,位右移
位左移 (bits<<1) 将原值按位向左移动一位,实际上相当于乘以2。在示例中,十六进制形式即十进制为 208。位左移运算符 (<<) 实现了按位左移操作。接下来,位右移运算符 (bits>>1) 将原值按位向右移动一位,相当于除以2向上取整。在示例中,这会导致输出结果为十六进制形式即十进制为 104。

C语言中 移位 和 按位 和 +-*\/ 的优先顺序是怎么样的
%= 模运算赋值 <<= 左移赋值 >>= 右移赋值 &= 位逻辑与赋值 |= 位逻辑或赋值 ^= 位逻辑异或赋值 上面的十个复合赋值运算子中,后面五个我们到以后位运算时再说明。 那么看了上面的复合赋值运算子,有人就会问,到底Total=Total+3;与Total+=3;有没有区别?答案是有的,对于A=A+1,表示式A被计算了两次...

求教C语言的逻辑运算优先度和+—<这些的关系
<< 左移运算符;>> 右移运算符。6级(左结合)<、<=、>、>=关系运算符。7级(左结合)“ == ”等于运算符;“ != ”不等于运算符。8级(左结合)“ & ”按位与运算符。9级(左结合)“ ∧ ”按位异或运算符。10级(左结合)“ | ”按位或运算符。11级(左结合)“&&”逻辑与...

C++|运算符优先级的合理性理解
按位运算符(不包括移位)的优先级低于关系运算符,体现了它们作为更低层次比较操作的特性。逻辑运算符的优先级通常高于关系运算符,这是因为逻辑运算符处理的是更为复杂的逻辑关系。最后,成员运算符.比解引用运算符具有更高的优先级,这是因为成员运算符将基址与偏移地址结合为一个整体来引用内存块,...

在c++位运算里什么是左移位和右移位
左移位就是比如二进制 0000 1011 左移一位就是 0001 0110,相当于乘2 右移位类似, 0000 1011 右移一位就是 0000 0101,相当于除2

相似回答