牛客刷题
- 有以下程序,程序运行后的输出结果是©
#include<iostream>
#include<stdio.h>
using namespace std;
int main(){
int m=0123, n = 123;
printf("%o %o\n", m, n);
return 0;
}
A 0123 0173
B 0123 173
C 123 173
D 173 173
题中格式化输出printf中使用了%o也就是要求进行8进制打印,8进制数字表示的形式的特征为数字以0开头,也就是说m是8进制数字而n是十进制数字。因此这里的m以8进制输出为123,而n需要进行进制转换将10进制数字转换为8进制,转换结果为173,因此选择C
- 以下哪个选项一定可以将flag的第二个bit置0(A)
A flag&=~2
B flag|=2
C flag^=2
D flag>>=2
题中的4个选项都是进行位运算。
按位或:只要有一个比特位为1则为1
按位与:只有两个比特位都为1才为1,否则为0
按位异或:两个比特位数字不同即一个为1一个为0才为1,否则都为0.
A:flag&=~2 这里先将2取反则1111 1101再将其与上flag,因此第二个比特位被置0
B选项使用flag或上2,只能将第二个比特位置为1,不能置0。
C选项将flag与2进行异或运算,异或置为0只有当flag的第二个比特位也为1时,才会是0,并且还会改变其他位的值。
D右移运算符将flag比特位右移两位,并没有置0的功能,因此选A
- 请声明一个指针,其所指向的内存地址不能改变,但内存中的值可以被改变。(B)
A const int const *x = &y;
B int * const x = &y;
C const int *x = &y;
D int const *x = &y;
E const int * const x = &y;
题中要求指针指向的内存地址不能改变,内存的值可以改变,这就是要求该指针为指针常量。根据指针常量的特点,const修饰符应该在*的右边,因此选B
- 以下C语言指令:
int a[5] = {