小编Mri*_*tyu的帖子

在 C 中,如果我们在同一操作中将位左移超出范围并再次右移值会发生什么

在 unsigned short 的情况下,我将 383 向左移动了 11 个位置,然后在同一条指令中再次将其向右移动了 15 个位置,我预计该值为 1 但它是 27。但是当我在不同的指令中同时使用这两个移位操作时之后(先左移,然后右移),输出为 1。这是一个示例代码:-

unsigned short seed = 383;
printf("size of short: %d\n",sizeof(short));
unsigned short seedout,seed1,seed2,seed3,seedout1;
seed1 = (seed<<11);
seed2 = (seed1>>15);
seed3 = ((seed<<11)>>15);
printf("seed1 :%d\t  seed2: %d\t seed3: %d\n",seed1,seed2,seed3);
Run Code Online (Sandbox Code Playgroud)

它的输出是:

size of short: 2
seed1 :63488      seed2: 1       seed3: 23    
seedout1: 8     seedout :382
Process returned 0 (0x0)   execution time : 0.154 s
Run Code Online (Sandbox Code Playgroud)

c

3
推荐指数
3
解决办法
1346
查看次数

标签 统计

c ×1