有符號類型無符號類型轉換


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace testBinary
{
    class Program
    {
        static void Main(string[] args)
        {
            //Convert.ToByte 默認字節表示范圍為  0 ~ 255 , 負數,正數,實質表示范圍不同。 最高位是符號位,還是無符號位。

            Console.WriteLine("0xff 二進制(0 ~ 255):{0}", Convert.ToString(0xff, 2));


            //-128 ~ 128 轉 0 ~ 255 , 將符號位當作數值
            int udata = -42 , data = 214;
            Console.WriteLine("-42轉無符號:{0}", -42 & 0xff);

            //以上等效 如下:取末七位 ,然后加上第8位數值
            Console.WriteLine((udata & ((1 << 7) - 1))  + Math.Pow(2 , 7));

            //以上等效 如下: 取末七位 ,  將第 8 位 置為 1
            Console.WriteLine( (udata & ((1 << 7) - 1)) | (1 << 7));

            //以上等效
            Console.WriteLine((udata & ((1 << 8) - 1)));

            //以上等效
            Console.WriteLine((udata & 0xff));

            //無符號轉有符號 , 只針對負數 如 -42
            sbyte ss = (sbyte)1;
            ss = (sbyte)((ss << 7) | (data & ((1 << 7) - 1)));
       // ss = (sbyte)data ; //c# 內部轉換 Console.WriteLine("無符號轉有符號:{0} {1} (8位表示:{2})", ss, Convert.ToString(ss , 2) , Format(ss)); //加減法運算 //有符號轉無符號 Console.WriteLine("加減法運算轉無符號:{0}", udata < 0 ? udata + 0xff : udata); //無符號轉有符號 Console.WriteLine("加減法運算轉無符號:{0}", udata > 127/* 1 << 7 */ ? udata - 0xff : udata); Console.ReadKey(); } /// <summary> /// sbyte 類型轉為二進制字符串形式 /// </summary> /// <param name="ss"></param> /// <returns></returns> static string Format(sbyte ss) { char[] str = new char[8]; for (int i = 7; i >= 0; i--) { str[i] = (char)(48 + (ss & 1)) ; ss >>= 1; } return new string(str); } } }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM