3、 结构 体sizeof 的题目。不写了。最后一问: 结构体成员能否进行 16bytes对齐?
根据 编译器和OS, 在64位OS上结构体内的数据成员可能16bytes 对齐. http://www.vckbase.com/document/viewdoc/?id=1054;http://blog.vckbase.com/panic/archive/2005/04/02/4340.aspx
4、写一个函数reverse一个byte
unsigned char ByteReverse(unsigned char szByte)
{
unsigned char a = szByte,
unsigned char b = 0;
int i;
for(i=0; i<8; i++) {
b <<= 1;
b |= (0x01 & a);
a >>= 1;
}
return b;
}
5、写一个函数判断一个整型是不是power of 2
bool IS_POWEROFTWO(unsigned int m)
{
if( ((m&(m-1))==0) && m>0 ) //decrease by 1 to remove one "1" in the binary of num at once.
return true;
else
return false;
}
7、2选1
写个函数实现反转一个字符串的 功能
// stringReverse.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include <iostream>
using namespace std;
/************************************************************************/
// 函数名称: Ustrlen
// 输入参数: strSource,待求长度字符串;
// 输出参数: int,字符串的长度。
// 描 述: 通过判断字符'/0'来得到字符串的长度
/************************************************************************/
int Ustrlen(const char *strSource)
{
// 声明变量
int iLength(0);
// 遍历字符串,查找字符'/0'
while(*strSource++ != '/0')
{
++iLength;
}
// 返回字符串的长度
return iLength;
}
/************************************************************************/
// 函数名称: _ReversalChar
// 输入参数: strSouce,待反转字符串;iStart,旋转字符串开始位置;iEnd,旋转字符串结束位置
// 输出参数: char*,反转后字符串的指针;
// 描 述: 反转iStart到字符串iEnd之间的字符串
/************************************************************************/
char* _ReversalChar(char *strSouce,int iStart,int iEnd)
{
// 反转字符串
for(;iEnd > iStart; ++iStart,--iEnd)
{
char ch;
ch = strSouce[iStart];
strSouce[iStart] = strSouce[iEnd];
strSouce[iEnd] = ch;
}
// 返回字符串指针
return strSouce;
}
/************************************************************************/
// 函数名称: ReversalChar
// 输入参数: strSource,待反转字符串
// 输出参数: char*,反转字符串后的指针
// 描 述: 按单词反转字符串
/************************************************************************/
char * ReversalChar(char *strSouce)
{
// 获取字符串的长度
int iLength = Ustrlen(strSouce);
// 反转整个字符串
_ReversalChar(strSouce,0,iLength-1);
// 声明变量(单词的开始以及结束默认从0开始)
int iStart(0),iEnd(0);
// 查找单词
// 像上面讨论的查找单词的情况,我们只需要修改这部分,就可以实现对不
// 同格式类型单词进行处理,为了更好的通用性,其实最好把查找单词这部分
// 作为单独一个函数,或者一个类来处理
for(int i = 0; i < iLength; ++i)
{
// 查找空格分割符号
if(strSouce[i] == ' ')
{
// 找到一个单词
iEnd = i-1;
// 对于只有一个字符的单词比如说(I)没有必要反转
if(iStart < iEnd)
{
// 反转单词
_ReversalChar(strSouce,iStart,iEnd);
}
// 记录下一个单词的开始位置
iStart = i+1;
}
// 特殊处理几种常见标点符号
else if(strSouce[i] == '!' || strSouce[i] == ',' || strSouce[i] == '.')
{
iStart = i+1;
}
}
// 返回反转后的字符串
return strSouce;
}
int main ()
{
char str []= "I want to be get hired!!!";
cout << "before reverse " << str << endl;
cout << "after reverse " << ReversalChar(str) << endl;
return 0;
}
8、不另外增加存储空间实现如下功能: a=1, b=2, 交换a和b的值
public int swap (int x,int y){
x = x + y;
y = x - y;
x = x - y;
}
9、改错题
void f()
{
unsigned static int i;
int sum = 0;
for(i=0; i<=100; i++)
sum+=i;
return sum;
}
去掉static,否则每次调用函数得到的结果都不同,static变量会保留值.