Messages in this thread | | | Date | Wed, 30 Apr 2008 19:33:42 +0200 (CEST) | From | Jan Engelhardt <> | Subject | Re: Improved Swapping Method In sort.c |
| |
On Wednesday 2008-04-30 19:09, Soumyadip Das Mahapatra wrote:
>Hello everybody, >The swapping method (in function void u32_swap() line no.. 14 to 16) in lib/sort.c can be improved by using the following code >*(u32 *)b ^= *(u32 *)a ^= *(u32 *)b ^= *(u32 *)a instead of the code given. This code >is not using third variable thus not consuming another memory. And I dont see any significance in >using *int size* argument. so the function should be >static void u32_swap(void *a, void *b) >{ > *(u32 *)b ^= *(u32 *)a ^= *(u32 *)b ^= *(u32 *)a; >}
That proposal looks like buggy.
19:32 yaguchi:/dev/shm > cat ui.c #include <stdint.h> #include <stdio.h>
static void u32_swap(void *a, void *b) { *(uint32_t *)b ^= *(uint32_t *)a ^= *(uint32_t *)b ^= *(uint32_t *)a; }
int main(void) { uint32_t x = 5, y = 7; printf("%u %u\n", x, y); u32_swap(&x, &y); printf("%u %u\n", x, y); } 19:32 yaguchi:/dev/shm > ./a.out 5 7 7 0
| |