c++语句 (((j>>(i-1))^1)==(k>>(i-1))) 是什么意思? 在线等

如题所述

这整个是一个由关系操作符"=="连接起来的复合表达式,
是判断左边与右边的表达式的值是否相等,相等则整个表达式的值为 true, 不等则是false,
左边的表达式:(j>>(i-1))^1 ---> j 右移 (i-1) 位 之后与1 按位异或.
右边的表达式:k>>(i-1) ---> k右移(i-1)位追问

在运算时 比如说 5XOR 1 是不是系统把它转换成 101在XOR1 呢

追答

这里只是与1 异或, 按照我的理解, 1在这里只是最后一位为1, 其他位为0,
8位的情况下,它是 0000 0001, 16位以此类推......
所以这里如果是 5 XOR 1 = 4, 4 XOR 1 = 5.
简单来说就是如果 (j>>(i-1)) 的结果
为偶数 则与1异或之后变为 j>>(i-1) + 1
为奇数 则是 j>>(i-1) - 1;

就是结果的最后一位取反: 1变成0, 0变成1.

追问

这个我懂了 ,,, 我想知道
位运算在系统中是直接使用的 还是要转成二进制再用?

追答

你要是问在系统中使用, 这些数据本身在系统中都是二进制形式存储, 又何来转换呢?

追问

e有道理 谢了

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-07-18
分别说明:
>>是算术右移。例如1>>1得到2
^是异或。1^1=0,0^1=1,即与1异或等价于取反
==是判断左右两边是否相同

这三个明白,整体就明白了。追问

在运算时 比如说 5XOR 1 是不是系统把它转换成 101在XOR1 呢

第2个回答  2013-07-18
这是个比较操作
j右移(i-1)位,再与1按位做异或操作,得出的值与k右移(i-1)位得出的值进行比较。追问

在运算时 比如说 5XOR 1 是不是系统把它转换成 101在XOR1 呢?

追答

系统中都是用二进制操作的,你虽然在屏幕上显示的是5,可是在内存中它保存的是二进制。

第3个回答  2013-07-18
j大于i减1的1次方等于k大于i减1.
第4个回答  2013-07-18
j左移i-1的1次幂 = k右移i-1位

C++中b=b|(1<<(i-1))什么意思?在线等!!急!
对这个值进行i-1次左移操作之后,原来的1就变成0...010...0。1后面是i-1个0 再和b的值做位或操作 明白了?再不明白就去查位操作,好好研究一下

【C++】在下面一段程序中if( (i>>j)&1)是什么意思???
假设 i=2,j=1 ① i的值 i的二进制形式 i >> 1(即i的二进制形式右移1位)2 0010 0001 ②& 按位相与运算符 参加运算的两个数据,按二进位进行“与”运算。如果两个相应的二进位都为1,则该位的结果值为1,否则为0。即0&0=0;0&1=0;1&0=0;1&1=1 引用①的i>>1...

c++中i-什么意思
i-是代码片段吧?如果是i--,表示变量自减1,也可以写作:i=i-1;即将该变量减少1的数值赋值给这个变量,例如:如果i=5,那么i--就是4

最佳调度问题(c\/c++)
如果各机器运行速度相等,换句话就是任务无论在哪台机器上运行完成时间都相等,则问题较简单 1 . 先将任务由大到小排序 2 . 计算n个任务需要的总时间和平均到k个机器上的时间 3 . 将大于平均时间的任务各分配一个机器,找到最大完成时间 4 . 将其他任务顺序安排在一台机器上,如果时间超出最大...

c++ 中if ((k&(1<<i)) && sum[i] < 0 && !v[k-(1<<i)]) 什么意思
分开看三个括号 括号1. 取k的第i位 - 是否为0,不为0则为真,为0则假 括号2. sum数组第i个字节小于0为真,否则为假 括号3. v数组的第k-(1<<i)的值为0则真,否则假.大致是这样, 但具体逻辑需要看编写者用来干嘛, 关键是看懂sum和v里面保存的是什么结构的数据,就是做什么用的.

C++问题 从1到10000之间的数
while(i!=0)死循环

...i <= n; i++){ a[i] <?= a[i - 1]; } 什么意思? 什么功能???求解...
这是数组中遍历的判断,判断数组中前一项是否比后一项大,这里不是<?=,直接就<=

C++中((i>>=1)!=0)什么意思 i=~0神马意思?
于是 i>>=1 就是 i = i \/ 2;if ((i>>=1)!=0) {...};就理解成2步:i = i \/2;if ( i !=0 ) {...} === i = ~0;波浪号就是2进制按位求反,某位0,其反为1,某位1,其反为0。~0 求反 得 所有 2 进制 位 为 1。 用 16 进制表示 为 0xffffffff 即 ...

c\/c++中k<<=1什么意思啊
i<<=1则表示将以上的二进制码往左移动一位,低位补零。结果是:0000 0110即十进制的6.所以无符号位移有结论:i<<=n 等价于 i=i*(2的n次方); i>>=n 等价于 i=i\/(2的n次方)(n>=0)(暂不考虑溢出的情况)。2.带符号位移(暂不考虑溢出的情况)带符号位移正数和无符号位移...

C++里面while(i=k-1)
while(i=k-1)就是先计算k-1的值,把它赋值给i,若值不为0,就执行循环体。程序运行后,会输出:i=6,k=4

相似回答