Zac*_*112 6 c bitwise-operators
我遇到了这个代码,用于表示数字的二进制表示.我想知道使用的必要性!! 在代码中.
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;
}
Run Code Online (Sandbox Code Playgroud)
Max*_*keh 10
!! 将任何非零值转换为1,并将零值保留为零.
x = 0;
y = 50;
!x; // 1
!y; // 0
!!x; // 0
!!y; // 1
Run Code Online (Sandbox Code Playgroud)
这是一个穷人的布尔演员.
使用的标志只有MSB设置,所有其他位清零,因此当你bitwise and使用数字时,你可以测试数字中的MSB.
按位和结果有两种结果:
现在我们需要一种映射方式
Non-zero -> 1
Zero -> 0
Run Code Online (Sandbox Code Playgroud)
所以我们使用双重否定.
可以使用以下方法完成同样的事情:
for(i=0;i<sizeof(int)*8;i++) {
(n & flag) ? printf("1"):printf("0");
n = n << 1;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1041 次 |
| 最近记录: |