c语言if ( ~0 == a | ~(0x04)),这句话什么意思

作者&投稿:牛萍 (若有异议请与网页底部的电邮联系)
C中if(x%3)是什么意思?~

1、含义
x%3的意思是,对X÷3求其余数,例如10%3=1 (10/3=3·······1)。
而if ( x%3 )的意思是,如果x%3的结果为真,即不为0,则执行if下面包含的语句。否则,就不执行。
2、原因
如代码所示,x定义为8,之后使用了一个for循环。循环条件为(;x>0;x--)。则,x的值在循环执行中,依次为8、7、6、5、4、3、2、1。
又有if ( x%3 ),且知,8%3=2,7%3=1,6%3=0,5%3=2,4%3=1,3%3=0,2%3=2,1%3=1。
需要注意的条件是,x--,这一条件,所以,每次x的值会在调用后自减一次;而--x,则是,减一后再使用;而continue,则是跳出一层循环,且不执行下面的语句。
则当8运行后,输出为8,在printf中自减成为7,又在for处自减,成为6,不满足x%3!=0,则,执行printf("%d,",--x),x又成为5,再按流程执行,等等等等。
因而,运行结果为8,5,4,2。

扩展资料:
1、x--
是指,先使用一次x,再使x自减1。
如int x = 6;
printf("%d",x);//此时得到6
printf("%d",x--);//运行得到6,x变为5
2、--x
是指,x先自减,再使用。
如int x = 6;
printf("%d",x);//此时得到6
printf("%d",--x);//运行得到5,x变为5
3、continue:
(1)终止本次循环的执行,即跳过当前这次循环中continue语句后尚未执行的语句,接着进行下一次循环条件的判断。
(2)结束当前循环,进行下一次的循环判断。
(3)终止当前的循环过程,但他并不跳出循环,而是继续往下判断循环条件执行语句.他只能结束循环中的一次过程,但不能终止循环继续进行。

先给你分析下这个if(!(a)),只有当a为假的时候,才执行if后面的语句。
if(!(j%i))
所以这个的意思就是j%i为假的时候,执行if后面的语句。
布尔型,0为假,非0为真,j%i为假,就是j%i==0;
所以if(!(j%i))等同于if(j%i==0)

这是一个判断语句,意思为,当括号内的表达式值为真,则执行,否则不执行。
括号内的逻辑表达式为
~0 == a | ~(0x04)
涉及到三个操作,~、==和|
1、 ~为位操作中的取反操作,即按位取反,如本来为0,则置为1,否则置为0。
于是
~0 = 0xff
~0x04= 0xfB

2、 |是按位或操作,只有两个操作数对应位上均为0,结果的该位上才为0,否则为1。
所以
a|~(0x04)也就是a|0xfb 除了第4位上(从低到高计数)结果的其它位上必然是1。
所以最终结果只有可能是0xff或者是0xfb, 具体取决于a的第4位。
如果a的第四位为0,那么结果为0xfb,否则结果为0xff。

3、 ==是逻辑判断操作,当两侧相等时,值为真,否则为假。
由于左边是0xff,右边是0xff或者0xfb, 于是当右侧为0xff时为真,否则为假。

4 综合以上,这句的含义就是,当a的第四位上为1,则执行判断。否则不执行判断。

5 根据这个结果,可以得到更简单的方式,即通过&操作的方式,将原判断表达式改为
if(a&0x04)
可以得到同样的效果。

运算符位或 ‘ | ’ 的优先级低于比较运算符,但是题目的意思应该要表达的是 ~0==(a|~(0x04))
0x04的二进制表示为 0000 0100,取反后为1111 1011,该数与a相与,若a的二进制第三位是1,则结果为1111 1111,若a的第三位是0,则结果为1111 1011,然后与~0比较,因为~0的二进制表示为全1,所以整个语句的意思就是判断a对应二进制的第三位是否为1

这样求就不对了, 因为它原本的表达意思是 ~0 == (a| ~(0x04))所以不能按照你的那样写

不对的,应该先做a|~(0x04)运算的。。。
下面进行分析:
1:~(0x04)二进制表示就是11111011
2:a | ~(0x04)结果:如果a的第三位为1则结果第三位也为1。结果是1111 1111
如果a的第三位是0则结果第三位也是0,结果是1111 1011
3:~0 结果是1111 1111
4:~0 == a | ~(0x04)进行判断,结果参照第2步,就知道了

0x04二进制 0100
~0x04 1011
~0 1111
1011或上a 是否为 1111
即第三位是否为1


秀峰区13424834732: c语言if ( ~0 == a | ~(0x04)),这句话什么意思 -
崔狐丽芝: 这是一个判断语句,意思为,当括号内的表达式值为真,则执行,否则不执行. 括号内的逻辑表达式为 ~0 == a | ~(0x04) 涉及到三个操作,~、==和| 1、 ~为位操作中的取反操作,即按位取反,如本来为0,则置为1,否则置为0. 于是 ~0 = 0xff ...

秀峰区13424834732: c语言中,if(a==0){} 与if(0==a){} 有区别么?其中a是变量 -
崔狐丽芝: 在功能上没有区别,只是后一种的编程习惯更好,因为前一种很容易不小心写成if(a=0)了,而这样的错误在编译的时候不会被发现,只是你的运行结果会不正确;而后一种如果写成了if(0=a),编译会报错,这样很容易就会发现你出错的地方.

秀峰区13424834732: C语言这个是判断0等于a吗? -
崔狐丽芝: C语言中,if(0==a)是判断0等于a(判断a是否等于0)

秀峰区13424834732: 在C语言编程时,if(a ==0 )和if(0 == a)的区别? -
崔狐丽芝: 你好:该写法有着很大的区别,根据程序编写规则该写法是错误的!但在该语句中没有什么区别!== 是指两边是否相等,没有于应变量的等于关系.

秀峰区13424834732: c语言中,if(a==0){} 与if(0==a){} 有区别么?其中a是变量 -
崔狐丽芝: 没有区别,后面的是防止将“ == "写成 ”=“,算是一种防错的处理技巧 :若误将" == " 写成 ” = “ ,前者的写法,编译器是不报错的;而后...

秀峰区13424834732: c语言:==的意思是 -
崔狐丽芝: 条件判断,例如if(a==0)就是如果a=0,则条件成立,就是if(1)如果a=1,则条件不成立就是if(0).

秀峰区13424834732: 求解在C语言中if(a)表示什么意思 非常感谢 -
崔狐丽芝: 您好: if后的括号内存放的是一个表达式,如果这个表达式的值为非0(即为真),就执行循环体,值为0(即为假)就不执行循环体. 同理,如果a==0,就不执行循环体;如果a!=0,就执行循环体. 那么if(1)就会执行循环体,if(0)就不执行循环体 希望能对你有帮助.

秀峰区13424834732: c语言中if语句常见的错误有哪些 -
崔狐丽芝: c语言中if语句常见的错误有: 1、if语句的错误使用 if(3>2); printf("hello"); else printf("hi"); 2、if语句的错误使用if(3>2)printf("one");elseif(3>1)printf("tow");else(3>0)printf("three"); 扩展资料 正确使用if语句 if语句是指如果满足...

秀峰区13424834732: 在C语言中if(!a)表示什么意思? -
崔狐丽芝: if( !a )就是一个判断语句,判断表达式 !a 的真假,进而决定是否执行后续操作.如果a是一个变量 当a等于0时,!a=1(为真),执行后续操作; 当a不等于0时,!a=0(为假),不执行后续操作;如果a是一个表达式 将表达式的值计算出来,当成变量来操作,判断过程同上.

秀峰区13424834732: c语言 双等号在if语句中怎样判断真假如:if(a==0) 如果变量a为0,括号里是真吗,变 -
崔狐丽芝: if(a==0){} a=0,就是a==0这个表达式为真 a=1(其他不等于0的整数也行),就是a==0这个表达式位假

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网