cxfans
8/26/2019 - 12:52 AM

p40-23 以及位运算求绝对值技巧

p40-23 以及位运算求绝对值技巧

#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>

typedef int ElemType;

typedef struct LNode {
    ElemType data;
    struct LNode *next;
} LNode, *LinkList;

//int abs(int a) {
//    return (a > 0) ? a : -a;
//}

int abs(int a) {
    int mask = a >> 31;
    return ((a ^ mask) - mask);
}

void func(LinkList L, int n) {
    int *lst = (int *) malloc(sizeof(int) * n);
    memset(lst, 0, sizeof(int) * n);
    LNode *p = L->next, *pre = L;
    while (p != NULL) {
        if (lst[abs(p->data) - 1] != 0) {
            pre->next = p->next;
            free(p);
            p = pre->next;
        } else {
            lst[abs(p->data) - 1] = 1;
            pre = p;
            p = p->next;
        }
    }
    free(lst);
}

int main() {
    printf("%d", abs(-12));
}