BitField.SampleLogic.BinToBcd C# (CSharp) Method

BinToBcd() public static method

Binary → BCD 変換
public static BinToBcd ( BitField bin, bool &overflow ) : BitField
bin BitField 変換元
overflow bool オーバーフローが起きたらtrueにセットされる。
return BitField
		public static BitField BinToBcd(BitField bin, out bool overflow)
		{
			BitField bcd = BitField.Concat(BitField.Create(30, 0, 0), bin);

			overflow = false;
			for(int i=0; i<30; ++i)
			{
				BitField a0 = BinToBcdAddIn(bcd[61, 58]);
				BitField a1 = BinToBcdAddIn(bcd[57, 54]);
				BitField a2 = BinToBcdAddIn(bcd[53, 50]);
				BitField a3 = BinToBcdAddIn(bcd[49, 46]);
				BitField a4 = BinToBcdAddIn(bcd[45, 42]);
				BitField a5 = BinToBcdAddIn(bcd[41, 38]);
				BitField a6 = BinToBcdAddIn(bcd[37, 34]);
				BitField a7 = BinToBcdAddIn(bcd[33, 30]);
				BitField add_in = BitField.Concat(a0, a1, a2, a3, a4, a5, a6, a7);
				BitField add_out = bcd[61, 30] + add_in;


				bcd.Assign(BitField.Concat(add_out, bcd[29, 0], BitField.Create(0, 0, 0)));
				overflow |= add_out[add_out.Msb];
			}

			return bcd[61, 30];
		}

Usage Example

Example #1
0
        /// <summary>
        /// BinToBcd および BcdToBin のチェック
        /// </summary>
        /// <param name="m">テスト入力値</param>
        static void TestBcd(ulong m)
        {
            BitField bin;

            bin = BitField.Create(31, 0, m);

            Console.Write("{0,15:d08} : ", bin.Value);
            bool     of;
            BitField bcd = SampleLogic.BinToBcd(bin, out of);

            Console.Write("{0,9:x08} : ", bcd.Value);
            BitField bin2 = SampleLogic.BcdToBin(bcd);

            Console.Write("{0,9:d08}", bin2.Value);
            if ((bin.Value % 100000000) != bin2.Value)
            {
                Console.Write(" **");
            }
            if (of)
            {
                Console.Write("  overflow");
            }
            Console.Write("\n");
        }