求教:位反运算符的结果问题

时间:2021-10-14 17:20:07
Declare @Mynum int
Set @Mynum=253
Select ~(@Mynum)

问题:这个位反语句的输出结果应该为-253,为何系统显示是-254?

5 个解决方案

#1


记得:二进制表达式时,负数是有加1标识为负数

#2



首先看等号左边 
(100) 的二进制表示为: 0110 0100 
按位取反的意思就是每一位取反,0变1,1变0 
所以: 
~100 的二进制表示为:1001 1011 
所以等号左边=1001 1011 

再看右边 
-101. 一旦看到出现负数,那么这个数一定是按有符号数的规则来表示的。一个二进制数 按位取反并加一以后就可以得到它自己的负数的补码,也就是说: 
~x+1=-x 
所以,我们把101按位取反加一 
先取反: 
~101=10011010 
再加一: 
~101+1=10011011=-101 
所以等号右边=10011011=左边,所以等号成立。

#3


学习了,位反运算加1

#4


上述为解释这个等式,参考下
~100=-101

#5


你的目的是什么呢?
如果是数值的符号取反,可以用0-num

#1


记得:二进制表达式时,负数是有加1标识为负数

#2



首先看等号左边 
(100) 的二进制表示为: 0110 0100 
按位取反的意思就是每一位取反,0变1,1变0 
所以: 
~100 的二进制表示为:1001 1011 
所以等号左边=1001 1011 

再看右边 
-101. 一旦看到出现负数,那么这个数一定是按有符号数的规则来表示的。一个二进制数 按位取反并加一以后就可以得到它自己的负数的补码,也就是说: 
~x+1=-x 
所以,我们把101按位取反加一 
先取反: 
~101=10011010 
再加一: 
~101+1=10011011=-101 
所以等号右边=10011011=左边,所以等号成立。

#3


学习了,位反运算加1

#4


上述为解释这个等式,参考下
~100=-101

#5


你的目的是什么呢?
如果是数值的符号取反,可以用0-num