按位取反~(~1<<1)另外C语言负数按位取反是啥啊
4个回答
展开全部
一、~(~1<<1)
计算过程为
1 先将1按位取反,即计算~1, 结果为除最低位为0外,其它位均为1;
2 计算左移1位,低位补0,于是结果的最低2位为0,其它为为1;
3 将2中结果按位取反,得到结果为,最低2位为1,其它为为0;
所以最终结果为3。
二、
在C语言中,负数是以补码方式存放的,计算方法为,负数绝对值对应数值的二进制值,按位取反后再加一。
当负数按位取反时,就是其补码按位取反。
比如,-10在存储为char型时,10的二进制值为0000 1010,取反后为1111 0101, 加一得到补码的二进制值为 1111 0110, 所以-10在存为char型时,补码的16进制值形式为0xF6.
当-10取反时,就是把1111 0110取反,结果为0000 1001, 结果为10进制的9。
计算过程为
1 先将1按位取反,即计算~1, 结果为除最低位为0外,其它位均为1;
2 计算左移1位,低位补0,于是结果的最低2位为0,其它为为1;
3 将2中结果按位取反,得到结果为,最低2位为1,其它为为0;
所以最终结果为3。
二、
在C语言中,负数是以补码方式存放的,计算方法为,负数绝对值对应数值的二进制值,按位取反后再加一。
当负数按位取反时,就是其补码按位取反。
比如,-10在存储为char型时,10的二进制值为0000 1010,取反后为1111 0101, 加一得到补码的二进制值为 1111 0110, 所以-10在存为char型时,补码的16进制值形式为0xF6.
当-10取反时,就是把1111 0110取反,结果为0000 1001, 结果为10进制的9。
展开全部
1的二进制表示为00000000 00000001
按位取反就是每一位上0变成1,1变成0
上面这个就变成11111111 111111110
按位取反~(~1<<1)
先是~1
结果是11111111 111111110
然后左移一位<<1
结果是 111111111 11111100
然后再取一次反
结果是 00000000 00000011
结果就3.。。。
所以~(~1<<1)的最后结果是3
希望能帮到你。。。。
按位取反就是每一位上0变成1,1变成0
上面这个就变成11111111 111111110
按位取反~(~1<<1)
先是~1
结果是11111111 111111110
然后左移一位<<1
结果是 111111111 11111100
然后再取一次反
结果是 00000000 00000011
结果就3.。。。
所以~(~1<<1)的最后结果是3
希望能帮到你。。。。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
~(~1<<1)的值为3,不管负数整数,一律按位取反,1变0,0变1。放然负数取反就成正了非负数。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
C语言_084_取反运算
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询