• 按位运算,窗体程序,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
        }
    }
    

      

  • 相关阅读:
    GTD180007:【运维】LINUX学习
    GTD180006:【运维】安装调试GDB
    {done}GTD180005:【翻译】LISP prehistory
    ComPiler180001:【学习】编译器学习链接
    AIIE180002:AIIE2015大会主题
    AIIE180001:AIIE2016大会主题
    GTD180004:【开发】python_med
    GTD180003:【开发】python_oeis
    欧亚大帝国及一战、二战
    大洲分界线
  • 原文地址:https://www.cnblogs.com/blacop/p/6559464.html
Copyright © 2020-2023  润新知