#include <limits.h>
#include <assert.h>
#include <stdio.h>
unsigned pad(unsigned pattern, unsigned patternLen,
unsigned leftBit, unsigned leftBitCnt,
unsigned rightBit, unsigned rightBitCnt)
{
unsigned r;
assert(leftBitCnt
< sizeof(unsigned) * CHAR_BIT
); assert(rightBitCnt
< sizeof(unsigned) * CHAR_BIT
); assert(patternLen
< sizeof(unsigned) * CHAR_BIT
); assert(leftBitCnt
+ patternLen
+ rightBitCnt
<= sizeof(unsigned) * CHAR_BIT
);
r = (leftBit << leftBitCnt) - leftBit;
r <<= patternLen;
r |= pattern;
r <<= rightBitCnt;
r |= (rightBit << rightBitCnt) - rightBit;
return r;
}
void printBin(unsigned x)
{
unsigned i;
for (i = 0; i < sizeof(unsigned) * CHAR_BIT; i++)
printf("%u", (x
>> (sizeof(unsigned) * CHAR_BIT
- 1 - i
)) & 1); }
int main(void)
{
printBin(pad(0x0F0, 12, 0, 2, 0, 2));
printBin(pad(0x0F0, 12, 0, 2, 1, 2));
printBin(pad(0x0F0, 12, 1, 2, 0, 2));
printBin(pad(0x0F0, 12, 1, 2, 1, 2));
return 0;
}
I2luY2x1ZGUgPGxpbWl0cy5oPgojaW5jbHVkZSA8YXNzZXJ0Lmg+CiNpbmNsdWRlIDxzdGRpby5oPgoKdW5zaWduZWQgcGFkKHVuc2lnbmVkIHBhdHRlcm4sIHVuc2lnbmVkIHBhdHRlcm5MZW4sCiAgICAgICAgICAgICB1bnNpZ25lZCBsZWZ0Qml0LCB1bnNpZ25lZCBsZWZ0Qml0Q250LAogICAgICAgICAgICAgdW5zaWduZWQgcmlnaHRCaXQsIHVuc2lnbmVkIHJpZ2h0Qml0Q250KQp7CiAgdW5zaWduZWQgcjsKICBhc3NlcnQobGVmdEJpdENudCA8IHNpemVvZih1bnNpZ25lZCkgKiBDSEFSX0JJVCk7CiAgYXNzZXJ0KHJpZ2h0Qml0Q250IDwgc2l6ZW9mKHVuc2lnbmVkKSAqIENIQVJfQklUKTsKICBhc3NlcnQocGF0dGVybkxlbiA8IHNpemVvZih1bnNpZ25lZCkgKiBDSEFSX0JJVCk7CiAgYXNzZXJ0KGxlZnRCaXRDbnQgKyBwYXR0ZXJuTGVuICsgcmlnaHRCaXRDbnQgPD0gc2l6ZW9mKHVuc2lnbmVkKSAqIENIQVJfQklUKTsKCiAgciA9IChsZWZ0Qml0IDw8IGxlZnRCaXRDbnQpIC0gbGVmdEJpdDsKICByIDw8PSBwYXR0ZXJuTGVuOwogIHIgfD0gcGF0dGVybjsKICByIDw8PSByaWdodEJpdENudDsKICByIHw9IChyaWdodEJpdCA8PCByaWdodEJpdENudCkgLSByaWdodEJpdDsKCiAgcmV0dXJuIHI7Cn0KCnZvaWQgcHJpbnRCaW4odW5zaWduZWQgeCkKewogIHVuc2lnbmVkIGk7CiAgZm9yIChpID0gMDsgaSA8IHNpemVvZih1bnNpZ25lZCkgKiBDSEFSX0JJVDsgaSsrKQogICAgcHJpbnRmKCIldSIsICh4ID4+IChzaXplb2YodW5zaWduZWQpICogQ0hBUl9CSVQgLSAxIC0gaSkpICYgMSk7CiAgcHJpbnRmKCJcbiIpOwp9CgppbnQgbWFpbih2b2lkKQp7CiAgcHJpbnRCaW4ocGFkKDB4MEYwLCAxMiwgMCwgMiwgMCwgMikpOwogIHByaW50QmluKHBhZCgweDBGMCwgMTIsIDAsIDIsIDEsIDIpKTsKICBwcmludEJpbihwYWQoMHgwRjAsIDEyLCAxLCAyLCAwLCAyKSk7CiAgcHJpbnRCaW4ocGFkKDB4MEYwLCAxMiwgMSwgMiwgMSwgMikpOwogIHJldHVybiAwOwp9Cg==