关于C#中的~运算符的疑问
~运算符(C#参考)VisualStudio2005其他版本~运算符对操作数执行按位求补运算,其效果相当于反转每一位。按位求补运算符是为int、uint、long和ulo...
~ 运算符(C# 参考)
Visual Studio 2005 其他版本
~ 运算符对操作数执行按位求补运算,其效果相当于反转每一位。按位求补运算符是为 int、uint、long 和 ulong 类型预定义的。
以上是官方的说法,但是如果是这样的话,就是按位求补,
首先由于补码原理是:正数的补码是其本身,所以+60的补码是60。负整数的补码是其正数的二进制表示形式按位取反然后加一,就是对应的补码。
但是问题就来了。
C#程序中比如这样写: int na = ~60 ; 那么 na等于-61。所以我不解啊。
就算按他说的,按位求补运算,其效果相当于反转每一位,60化为二进制是00111100,
然后取反为11000011,化为十进制为195。完全是风牛马不相及嘛。这结果我真的是百思不得其解啊。现在的专家教授写的书就跟TMD一坨屎一样,什么东西都写的抽象又难懂。我觉得一个牛B的教授应该是这样的,能够把一个非常复杂的问题将的通俗易懂,反过来一个很渣的教授一般会把1+1=1这样简单的问题说的像尼玛宇宙大爆炸一样高深,这样的教授专家其实根本就是一坨屎。。 展开
Visual Studio 2005 其他版本
~ 运算符对操作数执行按位求补运算,其效果相当于反转每一位。按位求补运算符是为 int、uint、long 和 ulong 类型预定义的。
以上是官方的说法,但是如果是这样的话,就是按位求补,
首先由于补码原理是:正数的补码是其本身,所以+60的补码是60。负整数的补码是其正数的二进制表示形式按位取反然后加一,就是对应的补码。
但是问题就来了。
C#程序中比如这样写: int na = ~60 ; 那么 na等于-61。所以我不解啊。
就算按他说的,按位求补运算,其效果相当于反转每一位,60化为二进制是00111100,
然后取反为11000011,化为十进制为195。完全是风牛马不相及嘛。这结果我真的是百思不得其解啊。现在的专家教授写的书就跟TMD一坨屎一样,什么东西都写的抽象又难懂。我觉得一个牛B的教授应该是这样的,能够把一个非常复杂的问题将的通俗易懂,反过来一个很渣的教授一般会把1+1=1这样简单的问题说的像尼玛宇宙大爆炸一样高深,这样的教授专家其实根本就是一坨屎。。 展开
1个回答
展开全部
60化为二进制是00111100,然后取反为11000011
11000011:-2^7+2^6+2^1+2^0=-61(第一位是符号位)
11000011:-2^7+2^6+2^1+2^0=-61(第一位是符号位)
更多追问追答
追问
这位仁兄,我还有个问题不解,按照你说的,这种按权重相加的方法确实等于-61,那么为什么我把11000011直接用计算器化为10进制是195呢?求解
好像计算器无法表示有符号的二进制数。
追答
这要看:11000011,你怎么定义它。
如果是补码形式:那么最高位就是负号位,那么最高位的1,转为10进制=-2^7
如果非补码形式:就是无符号形式,那个最高位的1,转为10进制=2^7
而程序中int型,都是带符号位的,也就是补码
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询