• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

关于Keil C52,if(!i) if(~i) 是否等效

619a4a33477e1934 2019-05-12 浏览量:816
关于Keil C52,if(!i) if(~i) 这两个等效吗
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • i是bit的话相等,如果是其他数据类型就不相等,第一个是逻辑非,第二个是按位取反,的也就是说第一个必须等于0才能进去if语句,如果其他一律进不了if

    第二个是只有当数据全部是1的时候才能不进if,比如char类型0xff是进不去if, 其他数据都能进if


    • 发布于 2019-05-12
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:8
  • 不能等效, if(!i),i为0结果为ture,其他值结果都为false。 if(~i)只有i的所有bit均为1结果为false,其他情况结果为true。
    • 发布于2019-05-12
    • 举报
    • 评论 0
    • 1
    • 0

  • 感叹号是个取非,对就错,错就对,波浪号是位操作,把i先变成2进制再逐位取反
    • 发布于2019-05-12
    • 举报
    • 评论 0
    • 1
    • 0

  • 这个~i是按位取反的意思,而!i是这个i从成立到不成立,或者从不成立到成立的转换,如果这个i是个bool型变量,那就是一样的,否则不同
    • 发布于2019-05-12
    • 举报
    • 评论 0
    • 1
    • 0

  • 感叹号是个非操作,bool 类型

    波浪线是取反操作,按位取反,数据类型和i保持一致。

    比如i=0x01,非操作,是false,取反操作是0xfe,非0就是true,一个false一个true

    • 发布于2019-05-13
    • 举报
    • 评论 0
    • 1
    • 0

  • 只有一个情况两种运算结果一样,那就是i这个数据的所有位都是0或者1,比如int i;i=0xffffffff 或者0x0,两个运算结果才一样
    • 发布于2019-05-13
    • 举报
    • 评论 0
    • 1
    • 0

  • if(!i) if(~i) 肯定不一样

    !i 是逻辑取反,

    ~i是按位取反,

    如果i是一个非0值,比如01010101(b),则!i变成0,而~i还是非0值。

    • 发布于2019-05-13
    • 举报
    • 评论 0
    • 1
    • 0

  • 不能等效,!:逻辑非运算。~:一个数的二进制取反码,也就是按位取反。

    !输出bool类型变量eg:!a​,如果a是非零数0x02那么!a = false;而~a就是​0xfd;

    • 发布于2019-05-13
    • 举报
    • 评论 0
    • 1
    • 0

相关问题

问题达人换一批

关于Keil C52,if(!i) if(~i) 是否等效