您的位置:首页 > 编程语言 > C语言/C++

[原创] C语言位运算和bit位操作程序题目答案 -- 谭浩强C语言习题答案

2011-03-19 21:19 375 查看
    这两天复习RenMian给我留下谭浩强的C语言教程,温故而知新,夯实基础知识,

    把谭浩强版C语言的第十二章《位运算》的书复习后把所有的编程习题做了一遍,贴出来激励自己一下,也希望有用的同学可以参考,时间和水平有限,不足之处,恳请读者批评指正

 

    第十二章《位运算》答案如下

 

inc/testBits.h

 

unsigned short getbits(unsigned short value, int n1, int n2)
{
unsigned short usRet = 0, usTemp = 0, usMask = 0;

usTemp = value >> n1;
usMask =  ~( ~0 << (n2 - n1 + 1));

usRet = usTemp & usMask;

return usRet;
}

short getComplement(short n)
{
short sRet = 0;

if (n >= 0)
{
sRet = n;
}
else
{
sRet = -n;
sRet = ~sRet;
sRet = sRet + 1;
}

return sRet;
}

unsigned short move(unsigned short value, int n)
{
unsigned short usTemp = 0, usDest = 0;

assert(n != 0);

if (n > 0)
{
usTemp = value << (16 -n);
usDest = value >> n;
}
else
{
n = -n;

usTemp = value >> (16 - n);
usDest = value << n;
}

usDest = usDest | usTemp;
return usDest;
}

int test_12_1()
{
unsigned short usRet = 0;
usRet = getbits(0x83BD, 4, 7);

if (usRet == 0xB)
{
printf("Test_12_1 Passed! /r/n");
return 0;
}

return 1;
}

int test_12_2()
{
int ite = 0, iRet = 0;
unsigned short usDest = 0, usSrc = 0xFFFF, usMask = 0;

for(ite = 0; ite < 16; ite += 2)
{
usMask = 1 << ite;
usDest = usDest | (usSrc & usMask);
}

if (usDest == 0x5555)
{
printf("Test_12_2 Passed! /r/n");
return 0;
}

return 1;
}

int test_12_4()
{
unsigned short usDest1 = 0, usDest2 = 0, usSrc = 0xFFF7;

usDest1 = move(0xFFF7, 4);
usDest2 = move(0xFFF7, -4);

if (usDest1 == 0x7FFF && usDest2 == 0xFF7F)
{
printf("Test_12_4 Passed! /r/n");
return 0;
}
return 1;
}

int test_12_5()
{
short sDest = 0, sSrc = -10;

sDest = getComplement(sSrc);

if (sDest == 0xFFFFFFF6)
{
printf("Test_12_5 Passed! /r/n");
return 0;
}

return 1;
}

int testBits()
{
int iRet = 0;

iRet += test_12_1();
iRet += test_12_2();
iRet += test_12_4();
iRet += test_12_5();

return iRet;
}


 

src/main.cc

 

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

#include "../inc/testFile.h"
#include "../inc/testBits.h"

int main()
{
int iRet = 0;

#if 0
iRet += testFile();
assert(iRet == 0);
#endif

iRet += testBits();
assert(iRet == 0);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  语言 c n2 编程