C 运算符=和!=同时

C 运算符=和!=同时,c,C,最近我看到一个用二进制打印数字的代码。 我不明白行:bit=(dec&0x8000)!=0; 有人能向我解释一下吗 int dec,n ; short bit; printf("Insert number: "); scanf("%d", &dec); if (dec == 9999) printf(" Out of range!"); for (int i = 1; i <= 16; i++) { bit = (dec

最近我看到一个用二进制打印数字的代码。
我不明白行:
bit=(dec&0x8000)!=0;
有人能向我解释一下吗

int dec,n ;
short bit;


    printf("Insert number: ");
    scanf("%d", &dec);

    if (dec == 9999)  printf(" Out of range!"); 


    for (int i = 1; i <= 16; i++) {
        bit = (dec & 0x8000) != 0;
        printf("%d", bit);
        if (i % 4 == 0) printf(" ");
        dec <<= 1;
    }
    printf("\n");



return 0;
int-dec,n;
短位;
printf(“插入编号:”);
scanf(“%d”和“&dec”);
如果(dec==9999)printf(“超出范围!”);

对于(int i=1;i如果计算
(dec&0x8000)
的结果不等于
0
,则为变量
bit
赋值
1
;否则赋值
0

首先计算
(dec&0x8000)!=0
的值为真或假(1或0)然后
被赋值。

这一行接受您从控制台插入的数字并应用逻辑and。例如,如果您输入1024(0100 0000二进制),则您有0100 0000和1000 0000 0000(即0x8000,每个数字都替换为二进制四分体)。在这种情况下,结果是0,不是!=0,然后变量位的值是0。

&
运算符是按位and。它用于屏蔽除位
0x8000
之外的
dec
中的所有位。
!=
运算符是一个比较运算符。它测试两个值是否不相等。如果它们不相等,则返回结果为1。否则结果为0。因此,如果
dec
0x8000
位非零,即1,则
bit
将为1。否则将为0。

它测试常量
0x8000
中设置的单个位是否在
dec
中设置。
&
是按位and运算符

(dec&0x8000)!=0
(0或1)的结果被分配给

就个人而言,我更喜欢
bit=!!(dec&0x8000)

bit = (dec & 0x8000) != 0 ;
相当于:

if ( (dec & 0x8000) != 0 ) bit = 1;
else                       bit = 0;
但是它是
if-else
语句的一行代码

&
是位and运算符,它比较
dec
0x8000
中的二进制记录,并返回
dec
0x8000
中的1

小示例:
11&5
返回
1
,因为
11=0b1011
5=0b101
比较(从右到左)两个数字中只有最后一个
1

0x8000
32768的十六进制

希望这将有助于