103 lines
1.9 KiB
C
103 lines
1.9 KiB
C
#define _BSD_SOURCE 1
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
|
|
#include "Utils.h"
|
|
|
|
inline void
|
|
printbin32( const unsigned long ulVal,
|
|
const unsigned char bGroupByBytes)
|
|
{
|
|
for(unsigned long idxBit = 1<<31;idxBit>0;idxBit>>=1)
|
|
{
|
|
if(bGroupByBytes)
|
|
switch(idxBit)
|
|
{
|
|
case 1<<23:
|
|
case 1<<15:
|
|
case 1<<7:
|
|
putchar(' ');
|
|
}
|
|
putchar(ulVal & idxBit ? '1' : '0');
|
|
}
|
|
}
|
|
|
|
inline unsigned char
|
|
count_bit32(const unsigned long ulVal)
|
|
{
|
|
unsigned char cpt = 0;
|
|
for(unsigned long idxBit = 1<<31;idxBit>0;idxBit>>=1)
|
|
if(ulVal & idxBit)
|
|
cpt++;
|
|
return cpt;
|
|
}
|
|
|
|
inline unsigned char
|
|
count_bit8(const unsigned char ulVal)
|
|
{
|
|
unsigned char cpt = 0;
|
|
for(unsigned char idxBit = 1<<7;idxBit>0;idxBit>>=1)
|
|
if(ulVal & idxBit)
|
|
cpt++;
|
|
return cpt;
|
|
}
|
|
|
|
inline void
|
|
printbin32Info( const unsigned long ulVal,
|
|
const unsigned short uhb,
|
|
const unsigned short ulb)
|
|
{
|
|
printbin32(ulVal,1);
|
|
putchar('\n');
|
|
printf("%02d....%02d %02d....%02d %02d....%02d %02d....%02d\n",
|
|
uhb,
|
|
3*(uhb+ulb+1)/4, 3*((uhb+ulb+1)/4)-1,
|
|
(uhb+ulb+1)/2, ((uhb+ulb+1)/2)-1,
|
|
(uhb+ulb+1)/4, ((uhb+ulb+1)/4)-1,
|
|
ulb);
|
|
}
|
|
|
|
unsigned long get_notnull_random()
|
|
{
|
|
unsigned long val;
|
|
do
|
|
val = random()<<1 ^ random();
|
|
while(!val);
|
|
return val;
|
|
}
|
|
|
|
unsigned long get_notnull_random_balanced()
|
|
{
|
|
unsigned long val;
|
|
do
|
|
val = random()<<1 ^ random();
|
|
while(count_bit32(val) != 16);
|
|
return val;
|
|
}
|
|
|
|
|
|
unsigned char get_notnull8_random_balanced()
|
|
{
|
|
unsigned char val;
|
|
static unsigned char prev = 0;
|
|
do
|
|
val = random()<<1 ^ random();
|
|
while((count_bit8(val) != 4) || (val == prev));
|
|
prev = val;
|
|
return val;
|
|
}
|
|
|
|
unsigned long get_notnull_random_balanced_mByte()
|
|
{
|
|
unsigned long val;
|
|
static unsigned long prev = 0;
|
|
do
|
|
val = (get_notnull8_random_balanced() << 24)
|
|
| (get_notnull8_random_balanced() << 16)
|
|
| (get_notnull8_random_balanced() << 8)
|
|
| (get_notnull8_random_balanced() << 0);
|
|
while(val == prev);
|
|
prev = val;
|
|
return val;
|
|
}
|