【问题标题】:How to do "not" without "!" in C没有“!”怎么办?在 C 中
【发布时间】:2013-09-29 00:08:03
【问题描述】:

在我的编程课中,我们不允许使用 || && 和 !对于这个任务。如果不使用!,你怎么能做一个“不”的声明?另外,如何做 && 会很有用,但我想我可以弄清楚。

(我们可以使用 % / * pow abs ln + -)

【问题讨论】:

  • 请使用 % / * pow abs ln + - 否 if、else 或 == 如有任何混淆,请见谅。这些值也是 0 到 4。
  • 不断变化的问题。在我看来,它仍然定义不明确。
  • 重写 !(variable % 4) without the !。仅使用 % / * ln abs + -
  • 你能用吗~ | & 或 ^ ?

标签: c logic


【解决方案1】:

!a 等价于 1-a,前提是 a 保证只取值 0 或 1。

【讨论】:

    【解决方案2】:
    if (!x) { }
    

    一样
    if (x==0) { }
    

    【讨论】:

      【解决方案3】:

      (!x) 等价于 (x?0:1) 或 (x==0)

      【讨论】:

        【解决方案4】:
        • 如何在不使用 ! 的情况下执行“not”语句?还有,如何 do && 会很有用,但我想我可以弄清楚。

        回答确切的问题:使用标准宏notand 等。只是不要忘记#include <iso646.h>

        【讨论】:

          【解决方案5】:

          怎么样

          1-(abs(abs(a+1) - abs(a-1))/2)
          

          解释:

          int not(int a){
              int b = abs(a+1) - abs(a-1);
              //b is either -2, 0 or 2 depending on whether a was <0, ==0 or >0.
              int c = abs(b) / 2;
              //c is either 0 or 1 depending on whether b was zero or non-zero
              return 1-c;
              //return 1 if a is 0 or 0 if a is 1
          }
          

          【讨论】:

            【解决方案6】:

            视情况而定,例如:

            if(a != b){
               //do stuff
            }
            

            可以改写为:

            if(a == b){} else {
              //do stuff
            }
            

            【讨论】:

              【解决方案7】:

              超级简单的方法,

              If(x == y) {
                  //Don't do something 
               } 
               Else{
                   //do something
               } 
              

              【讨论】:

                【解决方案8】:

                !(variable % 4)可以写成"\1\0\0"[abs(variable%4)]

                对于变量的任何整数值,variable % 4 只能产生整数值 {-3, -2, -1, 0, 1, 2, 3}。

                由于只有 7 个可能的值,我们可以使用结果查找表。

                结果!这些值是:

                • -3 -> 0
                • -2 -> 0
                • -1 -> 0
                • 0 -> 1
                • 1 -> 0
                • 2 -> 0
                • 3 -> 0

                为避免不得不处理负索引,我们将对结果进行 abs,因此我们只看到 0-3。

                表示此查找表的一种简单方法是使用文字字符串:“\1\0\0”。我们对值使用八进制转义序列。 0 处的值是 1,1 处的值是 0,等等。C 字符串有一个隐含的 0 (NUL) 作为最终字符,由于我们需要的最后一个值是 0,所以我没有明确包含它。

                如果不能使用方括号,也可以这样写:*("\1\0\0" + abs(variable%4))

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2015-10-07
                  • 1970-01-01
                  • 2019-12-24
                  相关资源
                  最近更新 更多