Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在没有选择的情况下确定哪个更大,哪个更小,或者;如果;声明_C - Fatal编程技术网

C 在没有选择的情况下确定哪个更大,哪个更小,或者;如果;声明

C 在没有选择的情况下确定哪个更大,哪个更小,或者;如果;声明,c,C,我是一个非常新的程序员。这是使用C。 我必须做一个程序,它接受两个输入整数,将较小的整数平方,将较大的整数加倍,如果两个输入相同,则保持整数相同。 我不能使用关系运算符(、=、或==)或if语句。我怎么开始呢?我知道我将不得不使用模数,但我不知道如何使用。 任何建议都将不胜感激 可以使用三元运算符 result_a=(!((a-b)&0x8000000))?2*a:((a<b)?a*a:a); result_b=(b>a)?2*b:((b<a)?b*b:b);

我是一个非常新的程序员。这是使用C。 我必须做一个程序,它接受两个输入整数,将较小的整数平方,将较大的整数加倍,如果两个输入相同,则保持整数相同。 我不能使用关系运算符(、=、或==)或if语句。我怎么开始呢?我知道我将不得不使用模数,但我不知道如何使用。
任何建议都将不胜感激

可以使用三元运算符

  result_a=(!((a-b)&0x8000000))?2*a:((a<b)?a*a:a);
  result_b=(b>a)?2*b:((b<a)?b*b:b);

这里有一个间接的答案可以帮助你上路:

x = y
X % y == 0
5 % 5 == 0

x < y
x % y == x
3 % 7 == 3
3 % 3 == 0
x=y
X%y==0
5 % 5 == 0
x
请查看此网站:

它显示了如何在没有分支的情况下比较两个整数

扰流板:

#include <stdio.h>

void no_if(int *p, int *q)
{
int *small, *large;
int diff = *p != *q;

small = *p < *q ? p : q;
large = *p > *q ? p : q;

*large += (diff) ? *large : 0;
*small *= (diff) ? *small : 1;

}

int main(void)
{
int i,j;
for (i=0; i < 3; i++) {
        for (j=0; j < 3; j++) {
                int ix=i;
                int jx=j;
                no_if ( &ix, &jx);
                printf("%d %d -> %d %d\n", i, j, ix, jx );
                }
        }
return 0;
}
#包括
无效否如果(int*p,int*q)
{
整数*小,*大;
int diff=*p!=*q;
小=*p<*q?p:q;
大=*p>*q?p:q;
*大+=(差异)?*大:0;
*小*=(差异)?*小:1;
}
内部主(空)
{
int i,j;
对于(i=0;i<3;i++){
对于(j=0;j<3;j++){
int ix=i;
int jx=j;
如果(&ix,&jx),则无;
printf(“%d%d->%d%d\n”,i,j,ix,jx);
}
}
返回0;
}

更新:这使用比较/关系运算符。

这只是一个隐藏的if。。。可能不是鬼鬼祟祟的教授想要的,我不允许使用>或<这样的选择。我只需要使用基本运算,如+、-、%、/、和*。如果a-b的结果像unsigned:1一样用于负号(ab),则可以查找其最高位。在实际应用程序中,a将使用if语句。较小的整数是更接近零的整数还是离+无穷远的整数?换句话说,-5比3小,或者-7比5大,或者-5比-3um大或者小。我不知道。到目前为止,我已经得到了(inputOne+2)%(inputwo+1)=modulesofInput。如果有帮助的话,你应该问自己“这项任务的目的是什么”,因为我想不出你想做这件事的任何理由。这个问题是非常本地化的。我想如果我可以回答1或0,那么我可以使用它并将其应用到一个方程中,以找到结果数。你所称的“选择”运算符()在C中被称为关系运算符(以及=和==)。做得很好@Esteban正是正确的提示!犯错误没有
7%3
给出
1
?这是错误的。100%10=0但100!=10.是的,Kerrek SB和mithrop,你们都完全正确。我在这方面真的是新手,所以我需要更清楚一些。到目前为止,我已经提出了(inputOne+2)%(inputwo+1)=modulesofInput,这应该对我有一些帮助?我该怎么办?我知道这是怎么回事,但我不允许使用这种方法。它使用关系运算符。但是在快速和肮脏部分,“&”是什么意思?我以前从未见过这样使用它,“快速和肮脏部分”不包含任何关系运算符。所以它是免费使用的。&运算符说明:“按位AND运算符(&)将第一个操作数的每一位与第二个操作数的对应位进行比较。如果两位均为1,则相应的结果位设置为1。否则,相应的结果位设置为0。”
#include <stdio.h>

void no_if(int *p, int *q)
{
int *small, *large;
int diff = *p != *q;

small = *p < *q ? p : q;
large = *p > *q ? p : q;

*large += (diff) ? *large : 0;
*small *= (diff) ? *small : 1;

}

int main(void)
{
int i,j;
for (i=0; i < 3; i++) {
        for (j=0; j < 3; j++) {
                int ix=i;
                int jx=j;
                no_if ( &ix, &jx);
                printf("%d %d -> %d %d\n", i, j, ix, jx );
                }
        }
return 0;
}