mfc实现c语言的注释,c-位运算-实现源码补码反码输出-MFC与QT界面实现

源码反码部码

源码变补码

1001

-1的源码

1110

取反

1111

加1得到-1的补码

补码变源码

1111

-1的补码

0000

取反

0001

加1

1001

处理符号位 与1000...相或位运算 得到-1的源码

#define _CRT_SECURE_NO_WARNINGS

#include

#include

char stry[33] = { 0 }; //int站32位,最后一个放\0 需要32个空间

char strf[33] = { 0 };

char strb[33] = { 0 };

//100010010 内存中的码

//100000000 与这个相&

//100000000 判断第一位是否为0 是否为补码

//100010010 左边移动一位,求出第二个数 num=num<<1 num<<=1

//

void bcode(int num)

{

unsigned int data = 1 << 31;//左边移动 变成1000 0000 0000 0000 0000 0000 0000 0000

for (int i = 1; i <= 32; i++)

{

if (num&data)

{

strb[i - 1] = '1';// 如果与第一个10000。。。。相&不为0,那么第0位也就是31位

}

else

{

strb[i - 1] = '0';

}

num <<= 1;// num=num<<1 左移动

//继续循环,总共循环32次就得到所有的编码

}

}

void fcode(int num)//求出反码, 复用上面的代码

{

unsigned int data = 1 << 31;

if (num < 0)

{

num = num - 1; //补码等于反码+1,那么反码就等于补码-1

}

for (int i = 1; i <= 32; i++)

{

if (num&data)

{

strf[i - 1] = '1';

}

else

{

strf[i - 1] = '0';

}

num <<= 1;

}

}

void ycode(int num)//求源码复用上面代码

{

unsigned int data = 1 << 31;

if (num < 0)

{

num = ~num + 1;// 补码= 源码取反+1,补码的补码就是源码

num=num | data; //处理符号位,让符号位变成1 与100...或 任何数与1相或都等于1

}

for (int i = 1; i <= 32; i++)

{

if (num&data)

{

stry[i - 1] = '1';

}

else

{

stry[i - 1] = '0';

}

num <<= 1;

}

}

void main()

{

int num;

scanf("%d", &num);

bcode(num);

printf("%s", strb);

fcode(num);

printf("\n%s", strf);

ycode(num);

printf("\n%s", stry);

system("pause");

}

给外部文件调,要封装起来,全局变量变为变局部变量

void fcode(int num, char strf[33]) 定义为两个参数的函数

main()函数里面定义三个数组 strf strb stry

调用的时候 bcode(num,strb);

#define _CRT_SECURE_NO_WARNINGS

#include

#include

//char stry[33] = { 0 }; //int站32位,最后一个放\0 需要32个空间

//char strf[33] = { 0 };

//char strb[33] = { 0 };

//100010010 内存中的码

//100000000 与这个相&

//100000000 判断第一位是否为0 是否为补码

//100010010 左边移动一位,求出第二个数 num=num<<1 num<<=1

//

void bcode(int num,char strb[33])

{

unsigned int data = 1 << 31;//左边移动 变成1000 0000 0000 0000 0000 0000 0000 0000

for (int i = 1; i <= 32; i++)

{

if (num&data)

{

strb[i - 1] = '1';// 如果与第一个10000。。。。相&不为0,那么第0位也就是31位

}

else

{

strb[i - 1] = '0';

}

num <<= 1;// num=num<<1 左移动

//继续循环,总共循环32次就得到所有的编码

}

}

void fcode(int num, char strf[33])//求出反码, 复用上面的代码

{

unsigned int data = 1 << 31;

if (num < 0)

{

num = num - 1; //补码等于反码+1,那么反码就等于补码-1

}

for (int i = 1; i <= 32; i++)

{

if (num&data)

{

strf[i - 1] = '1';

}

else

{

strf[i - 1] = '0';

}

num <<= 1;

}

}

void ycode(int num, char stry[33])//求源码复用上面代码

{

unsigned int data = 1 << 31;

if (num < 0)

{

num = ~num + 1;

num=num | data; //处理符号位,让符号位变成1 与100...或 任何数与1相或都等于1

}

for (int i = 1; i <= 32; i++)

{

if (num&data)

{

stry[i - 1] = '1';

}

else

{

stry[i - 1] = '0';

}

num <<= 1;

}

}

void main()

{

int num;

char strb[33] = { 0 };

char strf[33] = { 0 };

char stry[33] = { 0 };

scanf("%d", &num);

bcode(num,strb);

printf("%s", strb);

fcode(num,strf);

printf("\n%s", strf);

ycode(num,stry);

printf("\n%s", stry);

system("pause");

}

封装好之后,就可以做移植了,移植到mfc或者QT

MFC界面编程请参考MFC封装

\\需要的控件,变量绑定参见上面的文章,这里不再赘述

\\Pushbtn的触发代码如下

char strb[33] = { 0 };

char strf[33] = { 0 };

char stry[33] = { 0 };

//scanf("%d", &num);

int num=0;

CStringA str; //如果是vc++6.0 这里应该是CString

m_edit1.GetWindowTextA(str);//获取第一个输入栏的文本

sscanf(str, "%d", &num); //按%的整数 扫描到num

bcode(num, strb);

m_edit4.SetWindowTextA(strb);

//printf("%s", strb);

fcode(num, strf);

m_edit3.SetWindowTextA(strf);

//printf("\n%s", strf);

ycode(num, stry);

m_edit2.SetWindowTextA(stry);

//printf("\n%s", stry);

909db291ded2

001.png

下面我们简单介绍一下qt里面的界面设计过程

widget.h代码如下,以下代码如果没有注释,均为qt creator软件自动生成

#ifndef WIDGET_H

#define WIDGET_H

#include // QT的交互文本输入的库文件

#include

QT_BEGIN_NAMESPACE

namespace Ui { class Widget; }

QT_END_NAMESPACE

class Widget : public QWidget

{

Q_OBJECT

public:

Widget(QWidget *parent = nullptr);

~Widget();

private:

Ui::Widget *ui;

// 接受QTextEdit中的输入信息,转换为补码并显示在新的QTextEdit控件中

void bcode(); // 输出补码

void fcode();//输出反码

void ycode();//输出源码

QTextEdit *input;// 输入控件,变量类型为QString

QTextEdit *bout;// 补码输出控件

QTextEdit *fout;//反码输出控件

QTextEdit *yout;//源码输出控件

QString b;//补码输出控件中接受的QString类型变量b

QString f;//补码输出控件中接受的QString类型变量f

QString y;//补码输出控件中接受的QString类型变量y

};

#endif // WIDGET_H

定义好头文件,声明好变量之后,我们就进入widget.cpp文件进行编辑

以下没有注释的内容,均为自动生成, 同类型的作用省略文字部分,只显示//表示一个注释行为

#include "widget.h"

#include "ui_widget.h"

#include//QPushButton是一个按钮控件,有触发功能

#include//QText文本交互控件

#include//QLable是一个显示控件

Widget::Widget(QWidget *parent)

: QWidget(parent)

, ui(new Ui::Widget)

{

ui->setupUi(this);

this->resize(1005,400);//调整窗口大小

QLabel *p1=new QLabel("请输入",this);//new一个QLable对象,用于用户提示,this表示显示在当前QWidget窗口中

QLabel *p2=new QLabel("补码",this);//……

QLabel *p3=new QLabel("反码",this);//……

QLabel *p4=new QLabel("源码",this);//……

QPushButton *jisuanBtn=new QPushButton("变换",this);//new一个QPusbButton,用于触发进行计算,显示的函数

this->input=new QTextEdit(this);//input为头文件中定义的,所以这里new对象的格式有所变化,在this中就能找到声明过的这个QTextEdit对象,现在将他实例化

input->resize(250,50);//调整QTextEdit空间(input)大小

p1->move(100,180);//移动交互文本的label显示位置

input->move(0,200);//移动QTextEdit空间(input)的位置

this->bout=new QTextEdit(this);//new一个bout的QTextedit

bout->resize(250,50);//……

p2->move(350,180);//……

bout->move(250,200);//……

this->fout=new QTextEdit(this);//……

p3->move(600,180);//……

fout->resize(250,50);//……

fout->move(500,200);//……

this->yout=new QTextEdit(this);//……

yout->resize(250,50);//……

p4->move(850,180);//……

yout->move(750,200);//…… 以上都为界面调整过程。其实以上过程都可以在ui里面拖动实现,只是这里纯代码的方式实现

connect(jisuanBtn,&QPushButton::clicked,this,[=](){Widget::bcode();

Widget::fcode();

Widget::ycode();});//connect函数,连接信号与槽功能

//connect函数有四个参数,分别为,信号来源控件的指针,信号的方法,实现的槽函数的指针,和实现的槽函数

//[](){}这是一个lambda表达式,我们默认[]中的参数是"="

//花括弧里面,放入需要调用的槽函数,就是实现了一个信号连接多个槽函数的功能

//信号与槽的连接有很多方式,这里只是lambda表达式的一个版本

}

Widget::~Widget()

{

delete ui;

}

void Widget::bcode()//接受文本,显示补码的函数,Widget::意思是bcode这函数是Widget类中

//这是一个C++特有

{

int num;//接受需要转换的变量

char strb[33];//用于保存补码的char *数组

QString t=this->input->toPlainText();//将input控件中的QString变量类型转换为 纯文本

num=t.toInt();//然后将这个纯文本转换为整数传递给num

unsigned int data = 1 << 31;//左边移动 变成1000 0000 0000 0000 0000 0000 0000 0000

for (int i = 1; i <= 32; i++)

{

if (num&data)

{

strb[i - 1] = '1';// 如果与第一个10000。。。。相&不为0,那么第0位也就是31位

}

else

{

strb[i - 1] = '0';

}

num <<= 1;// num=num<<1 左移动

//继续循环,总共循环32次就得到所有的编码

}//上面就是逻辑实现部分,这里直接复制粘贴

b=QString(QLatin1String(strb));//char *转QString才能输出,b用来接收strb[33]数组的值

this->bout->setText(b);//有了QString类型的变量 b,就可以让b显示在bout这个QTextEdit空间中

//显示格式就是this指针下的bout控件下的setText()方法, 这个方法接收一个QString类型变量

}

void Widget::fcode()//下面的代码纯粹是上面三个函数的复制粘贴,替换b为f的过程

{

int num;

char strf[33];

QString t=this->input->toPlainText();

num=t.toInt();

unsigned int data = 1 << 31;

if (num < 0)

{

num = num - 1; //补码等于反码+1,那么反码就等于补码-1

}

for (int i = 1; i <= 32; i++)

{

if (num&data)

{

strf[i - 1] = '1';

}

else

{

strf[i - 1] = '0';

}

num <<= 1;

}

f=QString(QLatin1String(strf));

this->fout->setText(f);

}

void Widget::ycode()//下面的代码纯粹是上面三个函数的复制粘贴,替换b为y的过程

{

int num;

char stry[33];

QString t=this->input->toPlainText();

num=t.toInt();

unsigned int data = 1 << 31;

if (num < 0)

{

num = ~num + 1;

num=num | data; //处理符号位,让符号位变成1 与100...或 任何数与1相或都等于1

}

for (int i = 1; i <= 32; i++)

{

if (num&data)

{

stry[i - 1] = '1';

}

else

{

stry[i - 1] = '0';

}

num <<= 1;

}

y=QString(QLatin1String(stry));

this->yout->setText(y);

}

909db291ded2

qt.png

这里我们就实现了,补码,源码反码的输出,封装函数,界面编程实现(MFC与QT),其中MFC是windows平台,QT是跨平台

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值