有一个c++问题:没有搜索到<<这个符号 如果不和cin cout放在一起是啥意思呢?谢谢了

2025-03-04 08:51:37
推荐回答(2个)
回答1:

>> :右移运算符 位数进行右移
&: 按位与 位都为真

举例: 就LZ的程序段说明:

语句: return j >> SBBITS & 6;
//这里我假设SBBITS的值定义为 4;
//j 的定义为 5;
32位机器上:
首先先计算 SBBITS & 3
取补码:
6:正数的原码=补码
3:同上
00000000 00000000 00000000 00000110
& 00000000 00000000 00000000 00000011 //当两个为1,结果才为1
---------------------------------------------------------------------
00000000 00000000 00000000 00000010
所以 6&3 的结果为00000000 00000000 00000000 00000011(补码)
然后再执行 j >> 0000.....011;
右移我给他这样的规定:低位溢出,符号位保持不变,并用符号位补溢出的高位;
右移前:
00000000 00000000 00000000 00000011
右移后:
00000000 00000000 00000000 00000000 ->000011
我用箭头指向的数据是已经移出的,可以看到是6个,当然低位少了6个数据,
那么就用符号位(第一个数)在高位补全,所以结果是
00000000 00000000 00000000 00000000

当然这里我用的是正数,负数的话,补码就等于原码取反(1变0,0变01),然后最后一个位+1;

回答2:

你这是网络方面的编程吗,看样子是求子网掩码的函数,那么>>应该是向右移位吧,SBBITS应该是宏定义的一个常量整型,然后与3按位与,就是求j(二进制)移位后 后两位的值(因为3=0011B)