Tag: 减法

减去两个指针,给出意想不到的结果

#include int main() { int *p = 100; int *q = 92; printf(“%d\n”, p – q); //prints 2 } 上述程序的输出不应该是8吗? 相反,我得到2。

不同类型指针之间的减法

我试图找到两个变量之间的内存距离。 具体来说,我需要找到char []数组和int之间的距离。 char data[5]; int a = 0; printf(“%p\n%p\n”, &data[5], &a); long int distance = &a – &data[5]; printf(“%ld\n”, distance); 当我在没有最后两行的情况下运行我的程序时,我得到了两个变量的正确内存地址,如下所示: 0x7fff5661aac7 0x7fff5661aacc 现在我明白了,如果我没错,两者之间有5个字节的距离(0x7fff5661aac8,0x7fff5661aac9,0x7fff5661aaca,0x7fff5661aacb,0x7fff5661aacc)。 为什么我不能减去类型(int *)和类型(char *)之一的指针。 两者都是指内存地址..我该怎么做才能计算两者之间的距离,以字节为单位? 我尝试了两个指针中的一个,但它不起作用。 我得到:“ 错误:’char *’和’int *’不是兼容类型的指针 ”。 谢谢大家都会帮助我

如何用环绕或溢出减去两个无符号整数

有两个无符号整数(x和y)需要减去。 x总是大于y。 但是,x和y都可以环绕; 例如,如果它们都是字节,则在0xff之后变为0x00。 问题是如果x环绕,而y则没有。 现在x似乎小于y。 幸运的是,x不会缠绕两次(只保证一次)。 假设字节,x已经包装并且现在是0x2,而y没有并且是0xFE。 x – y的正确答案应该是0x4。 也许, ( x > y) ? (xy) : (x+0xff-y); 但我认为还有另一种方式,涉及2s赞美?在这个嵌入式系统中,x和y是最大的unsigned int类型,因此添加0xff …是不可能的 编写语句的最佳方法是什么(目标语言是C)?