c#按位取反问题

carl9081 2008-06-29 09:39:40
请问C#有没按位取反这个位运算的?~是求补码的运算吗?我要是想做按位取反的运算,应该如何进行?
...全文
3008 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
andybiao 2008-09-17
  • 打赏
  • 举报
回复
小弟初学C#,今天卡在“~”这个符号上了,按照书上说的是按位取反。这个定义到底是什么呢?
~11=-12,这是为什么呢?请各位朋友帮忙解决一下。
sswwee 2008-07-22
  • 打赏
  • 举报
回复
~就是按位取反啊。
yang709610485 2008-06-30
  • 打赏
  • 举报
回复
还有不好意思哈,上面多写了个=号,没检查过
yang709610485 2008-06-30
  • 打赏
  • 举报
回复
回房主:
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]);
}
}
}
}
carl9081 2008-06-29
  • 打赏
  • 举报
回复
我自己写了个,但是不知错在哪(只用于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();

}
哈哈哈啊002 2008-06-29
  • 打赏
  • 举报
回复

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

哈哈哈啊002 2008-06-29
  • 打赏
  • 举报
回复
楼主可以看看《c# lanague specification》7.6.4节。
yang709610485 2008-06-29
  • 打赏
  • 举报
回复
最基本的方法:
先把你输入的进制数转换成二进制,(这步很简单撒,我就不写代码了)
然后存入一个数组int[]data,接着就把
for(int i=0,i<=data.length()-1,i++)
{
if(data[i]==1)
{
data[i]==0;
}
else
{
data[i]==1;
}
}
输出修改后的数组即可
carl9081 2008-06-29
  • 打赏
  • 举报
回复
就是说,C#中是没有按位取反这个运算的?
gomoku 2008-06-29
  • 打赏
  • 举报
回复
按位取反 = 求补码(bitwise complement)


uint i = 0x8FFFFFFF;
string r = Convert.ToString(i, 2);

i = ~i;
string s = Convert.ToString(i, 2);
czk598478 2008-06-29
  • 打赏
  • 举报
回复

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



carl9081 2008-06-29
  • 打赏
  • 举报
回复
TO:yang709610485
您写的程序是否应为
for(int i=0,i <=data.length()-1,i++)
{
if(data[i]==1)
{
data[i]=0;
}
else
{
data[i]=1;
}
}


还有,把数字转换成二进制显示后,如何存入一个数组int[]data

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧