2020-3-9刷题
以下代码输出什么? B
int a =1,b =32 ;
printf("%d,%d",a<<b,1<<32);
A 1,1
B 1,0
C 0,0
D 0,1
<< | 左移 | 用来将一个数的各二进制位全部左移N位,高位舍弃,低位补0。 |
>> | 右移 | 将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0。 |
a的二进制值:0000 0001
b的二进制值:0010 0000
a<<b:a左移32位,得到结果1。
进行探索,
当a左移1位,printf("%d",a<<1); 打印结果是:2
当a左移2位,printf("%d",a<<2); 打印结果是:4
......
当a左移30位,printf("%d",a<<30); 打印结果是:1073741824
当a左移31位,printf("%d",a<<30); 打印结果是:-2147483648
当a左移32位,printf("%d",a<<30); 打印结果是:1
当a左移33位,printf("%d",a<<30); 打印结果是:2
当a左移34位,printf("%d",a<<30); 打印结果是:4
......
当a左移34位,printf("%d",a<<30); 打印结果是:4
...
当a左移62位,printf("%d",a<<30); 打印结果是:1073741824,得到:a<<30 == a<<62,30和62相差32
当a左移63位,printf("%d",a<<30); 打印结果是:-2147483648,得到:a<<31 == a<<63,31和63相差32
当a左移64位,printf("%d",a<<30); 打印结果是:1,得到:a<<32 == a<<64,32和64相差32
从表象来看,每左移32位便相当于没有移位的结果,猜到可能跟int类型占32位有关,事实的确这样:sizeof(int) = 4字节(b) = 32比特(bit)
通过以上推理得到公式:int a << b 可以理解为 int a << (b%32)
按照题意:int a =1,b =32,a<<b = a<<(32%32) = a<<0 = 1
而1<<32就是0000 0001 左移32位,高位舍弃,低位补0,最终则得到结果:0
(ps:个人目前的想法,可能不严谨,尚未找到权威答案,后续补充,欢迎提意见。其中部分思路来源于int类型左移位数超过32位的问题,比如1左移50位结果是什么)
具有相同类型的指针类型变量p与数组a,不能进行的操作是: D
以下序列中不可能是一棵二叉查找树的后序遍历结构的是: B
上网的时候发现网页不能访问,QQ使用正常,出现此问题最可能的原因是
系统故障1:DNS服务器出错 2.HTTP代理错误 3.winsock恶意篡改
有9个球,其中一个的质量与其他的不同,有一个天平,通过最多几次可以找出那个质量不一样的球? B
A 2
B 3
C 4
D 5
来源:牛客网
给字母重新进行二进制编码,以使得"MT-TECH-TEAM"(包含连字符,不包含引号)的长度最小.并能够根据编码,解码回原来的字符串.请问最优编码情况下该字串的长度是多少bit? B
以下哪个ip不和10.11.12.91/28处于同一个子网 D
对进程和线程的描述,以下正确的是( D )
https://segmentfault.com/q/1010000008695285/a-1020000008697506
B 答案错误 主进程的行为会影响子进程
C答案错误 多进程也会引起死锁
开发C代码时,经常见到如下类型的结构体定义:
typedef struct list_t{
struct list_t *next;
struct list_t *prev;
char data[0];
}list_t;
请问在32位系统中,sizeof(list_t)的值为? B
以下哪个属于在预编译阶段执行____,以下哪些指令属于操作符___C
a:malloc; b:++; c:#pragma; d:sizeof; e:#define
先序遍历序列:ABCDE
中序遍历序列:EDCBA
后序遍历序列:EDCBA
这棵树的特点:
①先序和中序遍历序列正好相反
②中序和后序遍历序列一样
另一个树,不符合本题描述,作为补充扩展。
先序遍历序列:ABCDE
中序遍历序列:ABCDE
后序遍历序列:EDCBA
这棵树的特点:
①先序和中序遍历序列一样
②中序和后序遍历序列正好相反
具有7个顶点的有向图至少应有多少条边才可能成为一个强连通图? B
由A地到B地,中间有一段扶梯,总路程和扶梯长度是固定的,为赶时间全程都在行走(包含扶梯上),中途发现鞋带松了,需要停下来绑鞋带.请问在扶梯上绑鞋带和在路上绑鞋带两种方式比较( B )
HTTPS是使用( C )来保证信息安全的.
mysql数据库中一张user表中,其中包含字段A,B,C,字段类型如下:A:int,B:int,C:int根据字段A,B,C按照ABC顺序建立复合索引idx_A_B_C,以下查询语句中使用到索引idx_A_B_C的语句有哪些?A B D
A select *from user where A=1 and B=1
B select *from user where 1=1 and A=1 and B=1
C select *from user where B=1 and C=1
D select *from user where A=1 and C=1
C++中构造函数和析构函数可以抛出异常吗? C
在x86系统下,sizeof如下结构体的值是多少? C
struct{
char a[10];
int b;
short c[3];
}
开发C代码时,经常见到如下类型的结构体定义:
typedef struct list_t{
struct list_t *next;
struct list_t *prev;
char data[0];
}list_t;
最后一行char data[0];的作用是? AB
A 方便管理内存缓冲区
B 减少内存碎片化
C 标识结构体结束
D 没有作用
以下关于linux操作系统中硬链接和软链接的描述,正确的是? B
将7723810的各位数字打乱排序,可组成的不同的7位自然数的个数是? B
对于满足SQL92标准的SQL语句:
select foo,count(foo)from pokes where foo>10group by foo having count (*)>5 order by foo
其执行顺序应该是? A
A FROM->WHERE->GROUP BY->HAVING->SELECT->ORDER BY
B FROM->GROUP BY->WHERE->HAVING->SELECT->ORDER BY
C FROM->WHERE->GROUP BY->HAVING->ORDER BY->SELECT
D FROM->WHERE->ORDER BY->GROUP BY->HAVING->SELECT
以下哪些jvm的垃圾回收方式采用的是复制算法回收 A C D
A 新生代串行收集器
B 老年代串行收集器
C 并行收集器
D 新生代并行回收收集器
E 老年代并行回收收集器
F cms收集器
HTTP中的POST和GET在下列哪些方面有区别?( ABCDE )
A 数据位置
B 明文密文
C 数据安全
D 长度限度
E 应用场景
我们用一个等臂天平来称物体的质量,如果我们要称的物体质量范围在1到40克(整数),请问我们最少需要几块砝码可以完成这项物体质量的称量? B
链接:https://www.nowcoder.com/questionTerminal/1ed7b4017caf4e79ab0621089b4e3d0d?orderByHotValue=0&done=0&pos=1&mutiTagIds=602&onlyReference=false
来源:牛客网
此题可以看成用多少个数可以表示1-40之间任何一个数。砝码有三种状态,放在物体同侧,放在物体另一侧,并不使用。 所以这些数之间可以加可以减,也可以不计算在内。考虑用对称三进制来计算,即,-1,0,1三个状态。40可以用1111来表示,所以最多只用四个砝码就可以表示1-40之间所有数。
在linux系统中,有一个文件夹里面有若干文件,通常用哪个命令可以获取这个文件夹的大小: B
下列关于线程调度的叙述中,错误的是( C )
Java的线程调度是基于优先级的抢先式调度,它总是选择高优先级的线程先执行。所以选项C正确。Thread提供了如下的基本线程控制方法:sleep (),线程暂停,让出CPU,使低优先级的线程运行;yield(),线程暂停,让出CPU,使同优先级的其他线程运行。如果不存在有机会运行的线程,yield()方法将直接返回,线程继续;join(),当前线程暂停,等待线程类对象运行结束。所以选项A和B正确。相同优先级的线程有可能采用分时调度也有可能是线程逐个运行,由具体JVM而定。
两个线程并发执行以下代码,假设a是全局变量,那么以下输出__ABCD__哪个是可能的?
int a=1;
void foo(){
++a;
printf("%d",a);
}
A 3 2
B 2 3
C 3 3
D 2 2
链接:https://www.nowcoder.com/questionTerminal/c3c9998a7c1c4dc4a705a89066f85cd9
来源:牛客网
A:3, 2
y先执行++a,a为2;
y再执行printf,a入栈,在打印到终端之前切换到x
x执行++a,a为3;
x执行printf,输出3;再切换到y
y执行打印,输出2
B:2 3
x先执行++a,a为2;
x再执行printf,输出2;切换到y
y执行++a,a为3;
y执行printf,输出3;
C:3 3
x先执行++a,a为2;切换到y
y执行++a,a为3;
y执行printf,输出3;切换到x
x执行printf,输出3
D:2 2
这里关键有两点:
(1)两个线程可随时被抢占
(2)++a和printf不是原子指令,可随时被打断;特别注意函数printf,a作为参数压栈后,a再变化则不会影响输出(printf实际打印的是压栈的参数,是值拷贝的栈变量)
在网络7层协议中,如果想使用UDP协议达到TCP协议的效果,可以在哪层做文章? C