转二进制:0 1010
计算补码:0 1010
按位取反:1 0101
转为原码:1 0101
按位取反:1 1010 反码
末位加一:1 1011 补码
符号位为1是负数,即-11
规律:~x=-(x+1);
因此,t=~10(1010)==-11;
int在VC里是4字节,也就是32位,所以那30个高位的0被取反成1了,当然不是1。要得到1,那把a与3做“与” *** 作,就把高位的30个位数全部清0了。
# include "stdio.h"
main()
{int a
a=2
a=~a
a=a&3
printf("%d",a)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)