在pp=(float*)calloc(40,4);语句中,开辟了( )个字节的连续存储单元?
指向函数int max(int x,int y)的指针ppmax的定义形式是( )
将变量x第12、14位清零、其他位不变的表达式是( )
设变量x的二进制数11010110,若下个通过运算x^y使结果中高四位是x对应位取反、低四位不变,则y的二进制数应是( )
(1) 160个
(2) int (*ppmax)(int, int)
(3) 若下个通过运算?什么意思?x^y是xor,怎么是取反?检查题目是不是写错了
1.在pp=(float*)calloc(40,4);语句中,开辟了160个字节的连续存储单元。其中40是申请40个浮点型数据的空间,而4表示每个浮点型数据占用4个字节。
2.指向函数int max(int x,int y)的指针ppmax的定义形式是int (*ppmax)(int, int);
3.将变量x第12、14位清零、其他位不变的表达式为:x & ~(1<<14) & ~(1<<12)
4.对于题目所述的要求结果中高四位是x对应位取反、低四位不变可以采取如下的方法,将x的高四位(从8位到11位)按位异或00001111,然后与15(二进制数为00001111)执行按位与运算就能得到y的值:
y = (x>>4)^15;
y &= 15;//相当于y &= 0b00001111
运算后y的二进制数即为00100101。
3、11110000 ,1与1异或为0,0与1异或为1 可以看到只要与1异或就是取反,高四位为1111
1与0异或为1,0与0异或为0,可以看到 与0异或原数不变,所以低四位为0000
二进制数为11110000
float* pp;
pp = (float*) calloc(40, 4);
int (*ppmax) (int, int);
这里的ppmax是一个指向函数的指针,指向的函数类型是int(int, int),即需要传入两个int类型的参数,返回一个int类型的值。 代码示例:
int max(int x, int y) {
if (x > y) {
return x;
} else {
return y;
}
}
int (*ppmax) (int, int);
ppmax = &max;
x &= ~(1 << 11); //清零第12位
x &= ~(1 << 13); //清零第14位
int y = (x ^ 255) | 42;