Трюки :: Cетевой уголок Majestio

Трюки


Обмен значениями без временной переменной

a^=b^=a^=b;

Короткая запись "если i или j меньше 0"

if ((i|j)<0) ...

Смещение класса/структуры

int ofs = (int)&((Class*)0)->element;

Duff''s device

#include <iostream>
using namespace std;
 
void foo(const int i) {
  cout << "foo(" << i <<")" << endl;
}
 
int main() {
  int c = 10;
  switch(c&3) while((c-=4)>=0) {
    foo(c); case 3:
    foo(c); case 2:
    foo(c); case 1:
    foo(c); case 0:;
  }
  return 0;
}

Художественное оформление true/false

#define TRUE  ''/''/''/''
#define FALSE ''-''-''-''

Чудная выборка символа

int direction = 0;
char direction_name = direction["FBLR"];

Операторы "головастики"

// -~x == x + 1
// ~-x == x - 1
// объяснение:
// -~x = ~(~x) + 1 == x + 1;
// ~-x = (~-x + 1) - 1 == -(-x) - 1 == x - 1;

Быстрый обратный квадратный корень (маленькая точность)

float InvSqrt (float x){
  float xhalf = 0.5f*x;
  int i = *(int*)&x;
  i = 0x5f3759df - (i>>1);
  x = *(float*)&i;
  x = x*(1.5f - xhalf*x*x);
  return x;
}

Опрератор "перейти" -->

void doStuff(int count) {
  while(count --> 0) {
    do();
  }
}
#C
Рейтинг: 5/5 - 1 голосов