我遇到了这个代码,用于表示数字的二进制表示.我想知道使用的必要性!!在代码中.
int main() { int n,i; unsigned flag = 1<<(sizeof(int) * 8 - 1); printf("Input the number\n"); scanf("%d",&n); for(i=0;i<sizeof(int)*8;i++) { printf("%d",!!(n & flag) ); n = n << 1; } return 0; }
解决方法
使用的标志只有MSB设置而所有其他位都被清除,所以当你按位时它和数字你可以测试数字中的MSB.
按位和结果有两种结果:
>零 – 表示数字中的数字为0
MSB.
>非零 – 表示数字为1英寸
它的MSB.
现在我们需要一种映射方式
Non-zero -> 1 Zero -> 0
所以我们使用双重否定.
可以使用以下方法完成同样的事情:
for(i=0;i<sizeof(int)*8;i++) { (n & flag) ? printf("1"):printf("0"); n = n << 1; }