1、有一个变量unsigned char data;
请写出将data第6位置1的表达式
data = data | 1 << 5
请写出将data第6位清0的表达式
data = data & ~(1 << 5)
请写出将data第6位取反的表达式:
data = data ^ 1 << 5
说明:最右边位为第0位,用十六进制表示
2、(1)执行语句"k=11>>1"后,变量k的当前值是
11的二进制是1011 右移一位 -> 101 =5
右移一位除以2
(2)请写出程序执行后a,b,c的值分别为多少
d的值为多少并写出原因
a:8 指针为8位
b:10 数组的整个空间大小
c:5 不包括 \0
d:随机值,errInfo3中没有 '/0',计算长度时没有暂停条件
3、系统中有如下三个全局变量,且已经为这些变量分配内存,类型声明为:
extern WinInfo tmpInfo1;
extern BoxInfo tmplnfo2
extern BoxInfo*tmplnof3:
请根据要求写出赋值语句
(1)为tmpInfo1的域height 赋值为1:
tmpInfo1.height = 1
(2)为tmpInfo1的域with 赋值为2:
tmpInfo1.baseInfo.with = 2
(3)为tmpnfo2的域height赋值为1
tmpInfo2.height = 1
(4)为tmpInfo2的域with 赋值为2
tmpInfo2.baseInfo -> with = 2
(5)为tmpInfo3的域height 赋值为1
tmpInfo3 -> height = 1
(6)为tmpInfo3的域with 赋值为2
tmpInfo3 -> baseInfo -> with = 2
4、有如下程序段:
执行函数 UserInit 后b中的值是
将 3 的地址传进fun里
将 3 作为首地址往后访问6个,访问到9
5、(1) A、B两个程序通过首地址为0x80000000的共享内存传递int型数据,A往该地址写值,B从该地址读值。该共享内存空间足够大
请写出A程序将int tmp变量写入地址为0x80000000内存的语句:
*(0x80000000) = temp
请写出B从地址为0x80000000内存读取数据并赋值给int tmp的语句:
temp=*(0x80000000)
(2)有如下语句:
char *buf = (char*)malloc(100);
该缓存用于封装通信数据包,请写出在 buf[4] 开始的四个字节内写入int型变量tmp的语句:
*(buf+4) = temp
(3)有如下程序段:
由于在定义数组时长度不能用变量,因此上述代码无法编译通过。在不改变程序段功能的情况下,请修改上述代码,改正其错误:
char *buf[100] 暂定一个比较大的数
6、假设循环队列用数组实现,其定义如下
队列示例:
循环队列中保存了1、2、3三个数据的状态
(1)假如队列未满,现有变量data需要入队,请写出表达式
seqn[tail]=data; tail=(tail+1+32)%32;
(2)假如队列未空,现在需要从队列取一个元素并赋值给变量data,请写出表达式
data=seqn[head]; head=(head-1+32)%32
(3)请写出队列为空的判断条件
head==tail
(4)请写出队列满的判断条件
head==(tail+1+32)%32
(5)请写出清空队列的表达式
memset(seqn,0,sizeof(seqn));
(6)请写出计算队列中元素个数的表达式
(tail - head +32)%32
(7)队列最多可以存放几个元素:
22,有一个元素是留出来判断是否为满的
7、在某操作系统中用数组unsigned char Rdy[8] 的64个位码来表示64个任务的状态,该数组称为就绪表。就绪表中的每一位表示某一个任务的状态,任务就绪则对应位置为1,任务非就绪则对应位清0。
若任务0就绪,则Rdy[0]中的位0置为1,
若任务1就绪,则Rdy[0]中的位1置为1,
依次类推若任务63就绪,则Rdy[7]中的位7置为1
(1)若任务i就绪,请写出设置就绪表Rdy[ ]的表达式:
任务0-8:Rdy[0]
任务9-16:Rdy[1]
任务17-24:Rdy[2]
Rdy[ i / 8 ] = Rdy[ i / 8 ] | 1 << ( i % 8 )
(2)若任务j从就绪态转为非就绪态,请写出设置就绪表Rdy[ ]的表达式
Ray[ j / 8 ] = Ray[ j / 8 ] & ~(1 << ( i % 8 ))
(3)在某一调度时刻就绪表中有多个任务为就绪态,假设任务0的优先级最高,任务63的优先级最低,请设计一个算法,找出最高优先级任务
cs
int fun(unsigned char* rdy)
{
for(int i=0;i<8;i++){ //控制元素
for(int j=0;j<8;j++){ //控制位数
if(rey[i] & 1<<j){ //第i个元素的第j位为1时 return
return i*8+j;
}
}
}
return -1;
}
8、有如下程序段:
请分析上述代码存在何种隐患,应如何修改?
只改变了value的值,没有改变外部数据
改为:用 int** value接 ,data[i]=**value
9、有如下程序:
请分析上述代码存在的问题,可能会引发何种后果
char 只能定义字符型变量,程序报错
10、有如下程序:
(1)请分析上述代码存在的bug?
只对p进行了指针指向赋值,没有对str做改变
(2)请修正代码(写上行号与修改后的代码)
//line4 GetMemory(&str) 传址
//line1 void GetMemory(char **p) 用二级指针去接
//line2 *p=(char*)malloc(10); *p访问str的空间 *p=str