C# 16进制取反的有关问题

C# 16进制取反的问题
 int d = Convert.ToInt32(“23”,16);//16进制的23
 d=~d;
 d.ToString("X"); // 输出十六进制

得到的结果是“FFFFFFDC”。应该返回"DC"才对,这应该怎么解决?谢谢各位了!
------解决思路----------------------
Console.WriteLine(Int32.MaxValue.ToString("X"));
因为Int32有这么长啊

static void Main(string[] args)
        {
            sbyte d = Convert.ToSByte("23", 16);
            Console.WriteLine(d);
            Console.WriteLine(SByte.MaxValue.ToString("X"));
            d = (sbyte)~d;
            Console.WriteLine(d.ToString("X"));
            Console.ReadLine();
        }