以下代码输出什么? 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
这棵树的特点:
①先序和中序遍历序列一样
②中序和后序遍历序列正好相反
来源:https://www.cnblogs.com/LinQingYang/p/12447157.html