gpt4 book ai didi

c - 如果 x <= y,只使用按位运算符创建一个返回 1 的函数

转载 作者:太空宇宙 更新时间:2023-11-04 02:26:49 24 4
gpt4 key购买 nike

<分区>

这是家庭作业,我正在为它苦苦挣扎,至少我能看到的一半类(class)都在这里。无论如何。我需要做一个 returns 1 if x <= y else return 0 的函数.

我们只能使用:! ~ & ^ | + << >>最大操作数是:24所有整数必须是 signed并且不能对我创建的或 C 提供的任何其他函数进行任何调用。我们可以假设所有整数都是 32 bits并且必须签名。

我不确定从哪里开始使用此功能。到目前为止,我有以下内容:

int isLessOrEqual(int x, int y) {
int diff = (y+~x+1); //The same as y-x
int diffSign = (diff>>31) & 1; //if negative, this will be 1. Else it'll be 0.
return !diffSign;
}

这似乎可行。但它不适用于某些输入(根据进行分级的程序)。

这是我在网上找到的一个功能,但我不想复制它。我想了解它并了解为什么它有效而我的无效。看来我的代码溢出了就不行了,需要处理一下。

int isLessOrEqual(int x, int y) {
int sign, isLess, dif, equal, isLessorEqual;

sign = x ^ y;
isLess = ~sign;
dif = y + (~x + 1);


equal = !dif;

sign = sign & x;

dif = ~dif;

isLess = isLess & dif;
isLess = isLess | sign;
isLess = isLess & (1 << 31);

isLessorEqual = (!!isLess) | (equal);

return isLessorEqual;
}

如果有人可以帮助我理解这些函数的区别或这些函数如何工作和处理溢出,我将不胜感激,这正是我所要求的。我很接近,只是无法弄清楚这个溢出的事情

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com