标签: bit-shift

使用汇编除以 2 的可变幂

我有这个任务:

\n
\n
除幂2
\n

计算x /2 n,对于 0 \xe2\x89\xa4 n \xe2\x89\xa4 30。向零舍入。

\n
    \n
  • 论点1:x
  • \n
  • 论据2:n
  • \n
\n

例子:

\n
    \n
  • dividePower2(15,1) = 7
  • \n
  • dividePower2(-33,4) = -2
  • \n
\n
\n

这是我到目前为止所得到的,但我不知道我是否朝着正确的方向前进(需要 AT&T 语法):

\n
.global dividePower2\n   dividePower2:\n   sar $2, %esi\n   ret\n
Run Code Online (Sandbox Code Playgroud)\n

assembly bit-manipulation x86-64 bit-shift integer-division

0
推荐指数
1
解决办法
149
查看次数

在C++中赋值到右移是什么意思?

我遇到了一些令人费解的代码:

int mask = someFunction();
mask>>=1; // What does this line do?
Run Code Online (Sandbox Code Playgroud)

我以前从未见过这种模式,想要了解它的作用.

c++ operators bit-shift

-1
推荐指数
1
解决办法
182
查看次数

按位运算符比+和 - 运算符更快

请参阅链接.

建议计算数字绝对值的最快方法是使用(相对困难的)按位运算符.

我知道按位运算符比除法和乘法更快.但它们是否比+和 - 运算符更快?

谢谢

javascript c c++ bit-manipulation bit-shift

-1
推荐指数
2
解决办法
1979
查看次数

微控制器的铸造改进

有没有办法改进这行代码?我认为这种转换会减慢我的计划速度.我认为可以使用像位移这样的东西,我不确定.

(uint16_t)(0.8*(float)(Value)

编辑:我需要编程atmega8微控制器.我的老师说这行代码需要更多的处理能力,并且有一种更简单的方法可以通过位移来实现这一点.

c optimization avr bit-shift

-1
推荐指数
1
解决办法
97
查看次数

为什么Perl认为1 << - 1是9223372036854775808?

如果我理解perldoc perlop正确,这个操作应该是未定义的:

溢出整数范围的结果是未定义的,因为它在C中也是未定义的.换句话说,使用32位整数1 << 32是未定义的.通过负位数移位也是不确定的.


我注意到我的设置中有两件事我无法解释:

  1. 1 << -1返回9223372036854775808without bigintintegerpragma(NaN在它们处于活动状态时返回).

    > perl -le "print 1<<-1"
      9223372036854775808
    
    Run Code Online (Sandbox Code Playgroud)
  2. 1 << -1在测试时返回true defined,无论bigintintegerpragma是否生效

    > perl -le "print 'yes' if defined(1<<-1)"
      yes
    
    > perl -le "use integer; print 'yes' if defined(1<<-1)"
      yes
    
    > perl -le "use bigint; print 'yes' if defined(1<<-1)"
      yes
    
    Run Code Online (Sandbox Code Playgroud)

我的设置细节:

> perl -V
Set up gcc environment - gcc.exe (rubenvb-4.5.4) …
Run Code Online (Sandbox Code Playgroud)

perl bit-shift

-1
推荐指数
1
解决办法
208
查看次数

如何在C中获取无符号8位类型的最高有效位

我正在尝试获取C中无符号8位类型的最高有效位。

这就是我现在正在尝试做的事情:

uint8_t *var = ...;
...
(*var >> 6) & 1
Run Code Online (Sandbox Code Playgroud)

这是正确的吗?如果不是,那会是什么?

c bit-manipulation bit-shift

-1
推荐指数
2
解决办法
149
查看次数

右移无符号字符是否填充了字符?

在我的系统上,(unsigned char) -1是(预计为 8 位字符) 1111 1111 二进制(255 十进制)。

同样,(unsigned char) -1 >> 1正如预期的 0111 1111。左边填充了一个零。

~((unsigned char) -1 >> 1) 正如预期的那样,是 1000 0000。

现在我想生成 unsigned char 0010 0000 例如。

我试过了~((unsigned char) -1 >> 1) >> 2,但这输出 1110 0000 .... 什么?为什么左边突然被填满了?


如何生成unsigned char启用第 n 位(从左侧)的 ?

我想

n   unsigned char
0   1000 0000
1   0100 0000
2   0010 0000
3   0001 0000
... 
7   0000 0001
Run Code Online (Sandbox Code Playgroud)

此刻,~((unsigned char) -1 >> 1) …

c c++ bit-manipulation bit-shift bitwise-operators

-1
推荐指数
1
解决办法
75
查看次数

C语言printf函数及输出问题

我需要帮助解决我心中的这个问题,所以如果有人有类似的问题,这会对我有很大帮助。

signed char c=0x10;
printf("%x", c<<0x4|c>>0x4); 
Run Code Online (Sandbox Code Playgroud)

为什么输出是101?

c printf bit-shift integer-promotion

-1
推荐指数
1
解决办法
129
查看次数

Python - 左移和右移长数字给出意想不到的结果

我有以下内容

a = 340282366920938463463374607431768211455
b = 127
print(a >> b)
Run Code Online (Sandbox Code Playgroud)

结果值为 1,但我不知道为什么。有什么建议吗?我做得对吗?结果是预期的吗?

具体要求是:

Shift A, right by B, where:

A = 340282366920938463463374607431768211455
B = 127
Run Code Online (Sandbox Code Playgroud)

python bit-shift bitwise-operators python-3.x

-1
推荐指数
1
解决办法
218
查看次数

条件检查给出错误答案

#include <stdio.h>
int main(){
  printf("%d,%d\n", 2 & (1<<1) , 2 & (1<<1)>0 );
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

该程序的输出是2,0.

2 & (1<<1)等于 2,大于 0。那么为什么2 & (1<<1) > 0计算结果为零?

c bit-shift operator-precedence bitwise-and relational-operators

-1
推荐指数
1
解决办法
35
查看次数