按位运算,窗体程序,And,Or,Xor

//BitOperations.Designer.cs
private System.Windows.Forms.Button btnAnd;
private System.Windows.Forms.Button btnOr;
private System.Windows.Forms.Button btnXor;
private System.Windows.Forms.Label label_Integer1;
private System.Windows.Forms.Label label_Integer2;
private System.Windows.Forms.TextBox txtInt1;
private System.Windows.Forms.TextBox txtInt2;
private System.Windows.Forms.Button btnClear;
private System.Windows.Forms.Button btnExit;
private System.Windows.Forms.Label label_Bits;
private System.Windows.Forms.Label lblInt1Bits;
private System.Windows.Forms.Label lblInt2Bits;
private System.Windows.Forms.Label lblBitResult;
private System.Windows.Forms.Label label_Result;

  

 

//BitOperations.cs

  

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace BitArray.Algo {
    //按位运算,窗体程序,And,Or,Xor
    public partial class BitOperations : Form {
        public BitOperations() { //构造器
            InitializeComponent();
        } //构造器

        //程序的主体部分,for语句从 1 递增 到32,一共16次对二进制数的每一位的判断作操作。
        //循环体内部的条件判断用到了位运算中的&运算(与运算)和<<运算(左移运算)。
        // <<运算表示把1的二进制形式整体向左移j位,左移后低位补0,移出的高位部分被舍弃。
        //例如,当j为15时,表达式(1<<j)的值为1000000000000000;当j为10时,值为0000010000000000。
        //所以 i & (1<<j)的值相当于把i的二进制的第j位取出来(i的第j位与(1<<j)的第j位(由上述可以,为1)作与运算,
        //只有当i的第j位为1时值为真)。循环后既得i的二进制形式。
        private StringBuilder ConvertBits(int val) { //转换器
            int bitmask = 1 << 31; //位掩码,左移31位
            StringBuilder bitBuffer = new StringBuilder(35);
            for (int i = 1; i <= 32; i++) { //从左到右遍历
                if ((val & bitmask) == 0) //Bit And Compute ,作与运算,只有为1才能输出,这样就是按照二进制原样输出了,头一位是符号位,0为正数,1为负数,负数是补码(反码+1)
                    bitBuffer.Append("0");
                else
                    bitBuffer.Append("1");
                val <<= 1;//左移1位 后 重新赋值

                if ((i % 8) == 0) //mod 8 ,append space
                    bitBuffer.Append(" ");
            }
            return bitBuffer;
        } //转换器//StringBuilder

        private void btnClear_Click(object sender, EventArgs e) { //Clear
            txtInt1.Text = "";
            txtInt2.Text = "";
            lblInt1Bits.Text = "";
            lblInt2Bits.Text = "";
            lblBitResult.Text = "";
            txtInt1.Focus();
        } //Clear

        private void btnAnd_Click(object sender, EventArgs e) { //And
            int val1, val2;
            val1 = Int32.Parse(txtInt1.Text);
            val2 = Int32.Parse(txtInt2.Text);
            lblInt1Bits.Text = ConvertBits(val1).ToString();
            lblInt2Bits.Text = ConvertBits(val2).ToString();
            lblBitResult.Text = ConvertBits(val1 & val2).ToString();
        } //And
        private void btnOr_Click(object sender, EventArgs e) { //Or
            int val1, val2;
            val1 = Int32.Parse(txtInt1.Text);
            val2 = Int32.Parse(txtInt2.Text);
            lblInt1Bits.Text = ConvertBits(val1).ToString();
            lblInt2Bits.Text = ConvertBits(val2).ToString();
            lblBitResult.Text = ConvertBits(val1 | val2).ToString();
        } //Or
        private void btnXor_Click(object sender, EventArgs e) { //Xor
            int val1, val2;
            val1 = Int32.Parse(txtInt1.Text);
            val2 = Int32.Parse(txtInt2.Text);
            lblInt1Bits.Text = ConvertBits(val1).ToString();
            lblInt2Bits.Text = ConvertBits(val2).ToString();
            lblBitResult.Text = ConvertBits(val1 ^ val2).ToString(); //Xor异或
        } //Xor
    }
}

  

posted @ 2017-03-16 14:49  影落明湖  阅读(226)  评论(0编辑  收藏  举报