# include <stdio.h>
# include <stdint.h>
# include <stdbool.h>
int32_t sdiv(int32_t a, int32_t b) {
bool aneg = a < 0;
bool bneg = b < 0;
// get the absolute positive value of both
uint32_t adiv = aneg ? -a : a;
uint32_t bdiv = bneg ? -b : b;
// Do udiv
uint32_t out = adiv / bdiv;
// Make output negative if one or the other is negative, not both
return aneg != bneg ? -out : out;
}
int main()
{
printf("%d\n", sdiv(100, 5));
printf("%d\n", sdiv(-100, 5));
printf("%d\n", sdiv(100, -5));
printf("%d\n", sdiv(-100, -5));
return 0;
}
1条答案
按热度按时间2guxujil1#
eBPF的指令集中没有带符号除法指令。
不过,你还是可以解决这个问题。带符号除法无非是保留两边的异或运算。也就是说,如果其中一方为负,则输出为负,但用负数除负数得到的结果为正。
This是我得出的结果:
我相信有更好的方法来做到这一点,但这似乎是工作。