C语言 按位运算(移位返回值)

0dxa2lsx  于 2023-02-15  发布在  其他
关注(0)|答案(3)|浏览(144)

if (((number >> i) & 1) == 1)
这是我的代码示例。
这个运算的返回值是如何确定的?我们把数字向左或向右移位。返回值是什么?
if (((number >> i) & 1) == 1)

gg0vcinb

gg0vcinb1#

number >> inumber按位向右移位i位:

number   i    number >> i
  ------   -    -----------
01010101   1    00101010
01010101   2    00010101
01010101   3    00001010

等等。
(number >> i) & 1number >> 11执行按位与运算:

00101010 (01010101 >> 1)
& 00000001
----------
  00000000

  00010101 (01010101 >> 2)
& 00000001
----------
  00000001

所以基本上,

if (((number >> i) & 1) == 1)

如果移位值的低位被设置,则将分支。

snvhrwxg

snvhrwxg2#

在此操作中如何确定返回值?
没有返回值。有一个带有相等运算符的if语句

if (((number >> i) & 1) == 1)

相等运算符的结果是0int类型的值1,这取决于表达式的两个操作数((number >> i) & 1)1是否相应地彼此不等或相等。如果结果是1(操作数彼此相等),则if语句的子语句将获得控制权。
因此,of语句检查numberi-th位是设置为1还是0。

z0qdvdin

z0qdvdin3#

>>是C语言中的右移运算符。
((number >> i) & 1)的结果取决于三个因素。

  1. number的类型为有符号或无符号。
  2. number的总大小(以位为单位),即8 * sizeof(number)。
  3. i的值。
    | | number有符号|number无符号|
    | - ------|- ------|- ------|
    | * * i的值〉= number的总大小(以位为单位)|number的有符号位|无|
    | * * i的值〈number的总大小(以位为单位)
    |number的第i位(LSb为第0位)|number的第i位(LSb为第0位)|

相关问题