Skip to content

Instantly share code, notes, and snippets.

@rexim
Last active December 8, 2025 14:27
Show Gist options
  • Select an option

  • Save rexim/6f2349b548fdead7ed790d1a40915ae1 to your computer and use it in GitHub Desktop.

Select an option

Save rexim/6f2349b548fdead7ed790d1a40915ae1 to your computer and use it in GitHub Desktop.
Xor Party Tricks
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int xs[] = {7,62,2,46,73,43,26,82,5,95,57,56,44,21,40,79,13,6,9,8,72,59,65,81,60,78,13,85,87,58,48,25,32,47,67,4,31,19,33,1,92,14,53,89,84,54,29,10,17,3,77,70,45,97,34,23,86,55,15,64,68,83,76,41,18,39,94,22,74,11,69,49,12,35,20,90,100,98,36,63,91,38,66,93,50,96,61,71,75,37,52,88,30,28,99,27,42,51,80,24,16};
int main()
{
int x = 0;
for (int i = 1; i <= 100; ++i) {
x ^= i;
}
size_t n = sizeof(xs)/sizeof(xs[0]);
for (int i = 0; i < n; ++i) {
x ^= xs[i];
}
printf("%d\n", x);
return 0;
}
def encrypt(m, k):
return ''.join([chr(ord(a)^k) for a in m])
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
typedef struct {
int value;
uintptr_t xored;
} Node;
Node *node_create(int value)
{
Node *node = malloc(sizeof(*node));
memset(node, 0, sizeof(*node));
node->value = value;
return node;
}
typedef struct {
Node *begin;
Node *end;
} Linked_List;
void ll_append(Linked_List *ll, int value)
{
if (ll->end == NULL) {
assert(ll->begin == NULL);
ll->end = node_create(value);
ll->begin = ll->end;
} else {
Node *node = node_create(value);
node->xored = (uintptr_t)ll->end;
ll->end->xored ^= (uintptr_t)node;
ll->end = node;
}
}
Node *node_next(Node *node, uintptr_t *prev)
{
Node *next = (Node*)(node->xored^(*prev));
*prev = (uintptr_t)node;
return next;
}
int main()
{
Linked_List xs = {0};
for (int x = 5; x <= 10; ++x) {
ll_append(&xs, x);
}
uintptr_t prev = 0;
for(Node *iter = xs.end; iter; iter = node_next(iter, &prev)) {
printf("%d\n", iter->value);
}
return 0;
}
#include <stdio.h>
int main()
{
int a = 69;
int b = 420;
printf("%d %d\n", a, b);
a ^= b; // a = 69^420, b = 420
b ^= a; // a = 69^420, b = 69
a ^= b; // a = 420, b = 69
printf("%d %d\n", a, b);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment