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的十六进制
希望这将有助于