【问题描述】
将一个16位二进制数表示成0和1的字符序列,即用一个字符数组来存放这个二进制数。
在这个类中设置两个构造函数,一个是传递整数参数的,另一个是传递字符串参数的。
因为用户在创建对象时传递的二进制数,可能是以整数形式给出,也可能是以数字串形式给出,系统应该都能接受。
另外有一个类型转换函数int(),用来将类类型向整型转换,即将二进制形式的类对象转换为整形数。
两个重载运算符“+”,“-”,用来完成两个二进制数之间的加减运算。

class binary {    //定义二进制类char bits[16];  //二进制字模数组
public:binary(char *);   //字符串参数构造函数binary(int);      //整型参数构造函数friend binary operator +(binary,binary);   //重载“+”,友元函数friend binary operator -(binary,binary);   //重载“-”,友元函数operator int();  //类类型转换函数(将类类型向整型转换,即将二进制形式的类对象转换为整形数)friend ostream & operator <<(ostream &out, binary &b);//重载“<<”,以二进制形式输出void print();//以整型形式输出
};

主函数设计如下,请勿修改:

int main(){binary n1="1011";binary n2=int(n1)+15;binary n3=n1-binary(7);cout<<n1<<endl;cout<<n2<<endl;cout<<n3<<endl;cout<<int(n2)+5<<endl;n2=n2-binary(5);n2.print();n3=n3+binary(5);n3.print();cout<<int(n3)-5<<endl;return 0;
}

【样例输出】
0000000000001011
0000000000011010
0000000000000100
31
21
9
4

PS:本题很多算法很简单,关键出错点在于粗心,bits[i]是字符型数组,其和数字的运算转换一定要注意-'0’或+'0’来取值

#include <iostream>
#include <string.h>
#include <math.h>
using namespace std;class binary //定义二进制类
{private:char bits[16];  //二进制字模数组
public:binary(char *);   //字符串参数构造函数binary(int);      //整型参数构造函数friend binary operator +(binary,binary);   //重载“+”,友元函数friend binary operator -(binary,binary);   //重载“-”,友元函数operator int();  //类类型转换函数(将类类型向整型转换,即将二进制形式的类对象转换为整形数)friend ostream & operator <<(ostream &out, binary &b);//重载“<<”,以二进制形式输出void print();//以整型形式输出
};binary::binary(char * str)   //字符串参数构造函数
{//把bits数组全部元素初始化为0for(int i=0;i<16;++i)bits[i] = '0';int len = strlen(str);for(int i=len-1,j=15;i>=0;--i,--j)//i的初始化是len-1 不然最后数组只存储了15个字符而不是16个bits[j] = str[i];
}binary::binary(int x)      //整型参数构造函数
{//把bits数组全部元素初始化为0for(int i=0;i<16;++i)bits[i] = '0';int i = 15;while( x>0 ){bits[i--] = x%2+'0';//注意bits[i]是字符数组,要类型转换x /= 2;}
}binary operator +(binary t1,binary t2)   //重载“+”,友元函数
{binary tt = (int)t1 + (int)t2;return tt;
}binary operator -(binary t1,binary t2)   //重载“-”,友元函数
{binary tt = fabs( (int)t1 - (int)t2 );return tt;
}binary::operator int()  //类类型转换函数(将类类型向整型转换,即将二进制形式的类对象转换为整形数)
{int num = 0;for(int i=15,j=0;i>=0;--i,++j)num += (bits[i]-'0') * pow(2,j);//最有毒的地方,别忘记bits[i]数组中存储的是字符而不是数字,要减'0'return num;
}ostream & operator <<(ostream &out, binary &b)//重载“<<”,以二进制形式输出
{for(int i=0;i<16;++i)out << b.bits[i];return out;
}void binary::print()//以整型形式输出
{cout << (int)*this << endl;
}int main()
{binary n1="1011";binary n2=int(n1)+15;binary n3=n1-binary(7);cout<<n1<<endl;cout<<n2<<endl;cout<<n3<<endl;cout<<int(n2)+5<<endl;n2=n2-binary(5);n2.print();n3=n3+binary(5);n3.print();cout<<int(n3)-5<<endl;return 0;
}

转载于:https://www.cnblogs.com/yuzilan/p/10626144.html

二进制类(运算符号的重载)相关推荐

  1. C/C++---二进制类(运算符号的重载)

    [问题描述] 将一个16位二进制数表示成0和1的字符序列,即用一个字符数组来存放这个二进制数.在这个类中设置两个构造函数,一个是传递整数参数的,另一个是传递字符串参数的.因为用户在创建对象时传递的二进 ...

  2. java乘方运算符号_Java 4. 运算符号

    java运算符 运算符 用来指明对于操作数的运算方式 按照操作数的数目来进行分类 单目 双目 三目 a++ a+b (a>b)?x:y; 按照运算符的功能来进行分类 算术运算符 [+ - * / ...

  3. c语言符号运算优先级6,c语言运算符号的优先级

    c语言运算符号的优先级 本文来自百度搜索只为查看方便 优先级等级口诀: 圆方括号.箭头一句号, 自增自减非反负.针强地址长度, 乘除,加减,再移位, 小等大等.等等不等, 八位与,七位异,六位或,五与 ...

  4. 走进C++程序世界------操作符运算、操作符重载、转换运算符、双目元算、+=,-+运算符,比较运算符及下标运算符

    重载,在一个类定义中,可以编写几个同名的方法,但是只要它们的签名参数列表不同,Java就会将它们看做唯一的方法.简单的说,一个类中的方法与另一个方法同名,但是参数表不同,这种方法称之为重载方法 下面关 ...

  5. 全国计算机二进制计算原理,二进制的运算方法

    二进制的运算方法 来源:http://www.zfnn.com/post/166.html 二进制与其它进制的转换和运算,应该说是计算机类的考试,逢试必考,这里总结一下知识点. 二进制运算原理,大家都 ...

  6. 一、C语言基础[运行原理、数据类型、格式化输出、进制转换、优先级、运算符号]

    一.c语言执行流程 1.1 源文件 内容:程序员书写源代码 1.2 目标文件 内容: 编译器:源代码转换到目标文件中代码(此时没有绑定任何库) 链接器:为目标文件中代码绑定上库 注意: 3. 此过程如 ...

  7. 第十三周项目一-分数类中的运算符重载

    /**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年5月25日*版 本 号:v1. ...

  8. 第十二周项目二-Time类中的运算符重载

    /**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年5月24日*版 本 号:v1. ...

  9. javascript中的运算符号

    JS中运算符号大部分和java中的运算符一样,我们在这里分析一下特殊的运算符号 一.关于/% JS中,数字类型都是number,能除尽,则默认结果就是一个整数,不能除尽,结果默认就是浮点 JS中如果出 ...

最新文章

  1. 第4关:非递归实现二叉树左右子树交换
  2. 线性霍尔传感器SS495、A1308、A1302
  3. python汽车仿真_汽车山羊问题的分析以及Python和MATLAB仿真实验
  4. FPGA图像处理的开发流程
  5. 除了PS,原来这个也可以轻松实现图像处理!
  6. 【软件开发底层知识修炼】十九 GDB调试从入门到熟练掌握超级详细实战教程学习目录
  7. 李洋疯狂C语言之求素数的方法
  8. 亚马逊首席科学家 李沐:工作五年反思
  9. NetDevOps常用数据库python实战-influxDB_grafana
  10. 如何动态确认每个输入的值都符合设定域
  11. 9x9九宫格java_数独9x9九宫格的口诀 9×9数独技巧
  12. excel2007/2010中独立显示窗体的方式
  13. Matlab入门基础 note1——赋值与小数
  14. 金融业信贷风控算法2-初等统计理论
  15. Matlab求单边谱,关于实信号的双边谱和单边谱
  16. ISP AWB自动白平衡包含一段简单的色温估计进行白平衡调节的程序
  17. 简单局域网网络故障排查和处置
  18. 傅里叶实现高精度乘法
  19. 2020java面试题,找不到工作来找我(二)
  20. OFDM子载波频率 知乎_5G的速度到底能有多快?

热门文章

  1. python打印不同颜色的字_Python 根据日志级别打印不同颜色的日志的方法示例
  2. bootstrap下拉框分页_学习使用Bootstrap输入框、导航、分页等常用组件
  3. 三菱plc 毕设_PLC漏型和源型输入有何不同?
  4. Centos在线安装nginx
  5. @Autowired 与@Resource的区别
  6. IDEA去除掉虚线,波浪线,和下划线实线的方法
  7. element ui实现动态显示textarea剩余字数
  8. 解决Lync 2013演示PPT提示证书问题的多种方法
  9. 一篇关于我是怎么理解喜欢上并且做好前端开发工作的文档
  10. iOS uuchart 用法