请问C#有没按位取反这个位运算的?~是求补码的运算吗?我要是想做按位取反的运算,应该如何进行?

解决方案 »

  1.   

    按位取反 = 求补码(bitwise complement)
        uint i = 0x8FFFFFFF;
        string r = Convert.ToString(i, 2);
        
        i = ~i;
        string s = Convert.ToString(i, 2);
      

  2.   

    最基本的方法:
    先把你输入的进制数转换成二进制,(这步很简单撒,我就不写代码了)
    然后存入一个数组int[]data,接着就把
    for(int i=0,i<=data.length()-1,i++)
    {
        if(data[i]==1)
        {
            data[i]==0;
        }
        else 
        {
            data[i]==1;
        }
    }
    输出修改后的数组即可
      

  3.   

    楼主可以看看《c# lanague specification》7.6.4节。
      

  4.   


    msdn上摘的:~ 运算符对操作数执行按位求补运算,其效果相当于反转每一位。按位求补运算符是为 int、uint、long 和 ulong 类型预定义的。备注
    用户定义的类型可重载 ~ 运算符。有关更多信息,请参见 operator。在枚举时通常允许整型运算。示例
      复制代码 
    // cs_operator_bitwise_compl.cs
    using System;
    class MainClass
    {
        static void Main() 
        {
            int[] values = { 0, 0x111, 0xfffff, 0x8888, 0x22000022};
            foreach (int v in values)
            {
                Console.WriteLine("~0x{0:x8} = 0x{1:x8}", v, ~v);
            }
        }
    }
     输出
      
    ~0x00000000 = 0xffffffff
    ~0x00000111 = 0xfffffeee
    ~0x000fffff = 0xfff00000
    ~0x00008888 = 0xffff7777
    ~0x22000022 = 0xddffffdd
     
      

  5.   

    TO:yang709610485 
    您写的程序是否应为
    for(int i=0,i <=data.length()-1,i++) 

        if(data[i]==1) 
        { 
            data[i]=0; 
        } 
        else 
        { 
            data[i]=1; 
        } 
    }
    还有,把数字转换成二进制显示后,如何存入一个数组int[]data
      

  6.   


    msdn上摘的: ~ 运算符对操作数执行按位求补运算,其效果相当于反转每一位。按位求补运算符是为 int、uint、long 和 ulong 类型预定义的。 备注 
    用户定义的类型可重载 ~ 运算符。有关更多信息,请参见 operator。在枚举时通常允许整型运算。 示例 
      复制代码 
    // cs_operator_bitwise_compl.cs 
    using System; 
    class MainClass 

        static void Main() 
        { 
            int[] values = { 0, 0x111, 0xfffff, 0x8888, 0x22000022}; 
            foreach (int v in values) 
            { 
                Console.WriteLine("~0x{0:x8} = 0x{1:x8}", v, ~v); 
            } 
        } 

    输出 
      
    ~0x00000000 = 0xffffffff 
    ~0x00000111 = 0xfffffeee 
    ~0x000fffff = 0xfff00000 
    ~0x00008888 = 0xffff7777 
    ~0x22000022 = 0xddffffdd 
      

  7.   

    我自己写了个,但是不知错在哪(只用于0到255的数字)string S =Convert.ToString (255,2);
                Console.WriteLine(S);
                //不足8位补
                switch (S.Length)
                {
                    case 1:
                        S = "0000000" + S;
                        break;
                    case 2:
                        S = "000000" + S;
                        break;
                    case 3:
                        S = "00000" + S;
                        break;
                    case 4:
                        S = "0000" + S;
                        break;
                    case 5:
                        S = "000" + S;
                        break;
                    case 6:
                        S = "00" + S;
                        break;
                    case 7:
                        S = "0" + S;
                        break;
                    default:
                        break;
                }
                char[] C = S.ToCharArray();
                int[] Data = new int[8];
                for (int i = 0; i < 8; i++)
                {
                    Data[i] = Convert .ToInt32 (C[i]);
                }
                for (int i = 0; i < 8; i++)
                {
                    if (Data[i] == 0)
                    {
                        Data[i] = 1;
                    }
                    else
                    {
                        Data[i] = 0;
                    }
                }
                S = "";
                for (int i = 0; i < 8; i++)
                {
                    S = S + Convert.ToString(Data[i]);
                }
                Console.WriteLine(S);
                Console.ReadLine();        }
      

  8.   

    回房主:
    namespace aaa
    {
        class Program
        {
            static void Main(string[] args)
            {
                string str ="0110101001";
                char [] arrStr=str.ToCharArray();
                int [] arrInt =new int [arrStr.Length];
                for (int i = 0; i <= arrStr.Length-1; i++)
                {
                    arrInt[i] = (int)arrStr[i] - 48;//(反正减0的ASCLL玛值,网了是好多了)
                    Console.WriteLine(arrInt[i]);
                }
            }
        }
    }