我有这个任务:
\n\n\n除幂2
\n计算x /2 n,对于 0 \xe2\x89\xa4 n \xe2\x89\xa4 30。向零舍入。
\n\n
\n- 论点1:
\nx- 论据2:
\nn例子:
\n\n
\n- \n
dividePower2(15,1) = 7- \n
dividePower2(-33,4) = -2
这是我到目前为止所得到的,但我不知道我是否朝着正确的方向前进(需要 AT&T 语法):
\n.global dividePower2\n dividePower2:\n sar $2, %esi\n ret\nRun Code Online (Sandbox Code Playgroud)\n 我遇到了一些令人费解的代码:
int mask = someFunction();
mask>>=1; // What does this line do?
Run Code Online (Sandbox Code Playgroud)
我以前从未见过这种模式,想要了解它的作用.
有没有办法改进这行代码?我认为这种转换会减慢我的计划速度.我认为可以使用像位移这样的东西,我不确定.
(uint16_t)(0.8*(float)(Value) ?
编辑:我需要编程atmega8微控制器.我的老师说这行代码需要更多的处理能力,并且有一种更简单的方法可以通过位移来实现这一点.
如果我理解perldoc perlop正确,这个操作应该是未定义的:
溢出整数范围的结果是未定义的,因为它在C中也是未定义的.换句话说,使用32位整数
1 << 32是未定义的.通过负位数移位也是不确定的.
我注意到我的设置中有两件事我无法解释:
1 << -1返回9223372036854775808without bigint或integerpragma(NaN在它们处于活动状态时返回).
> perl -le "print 1<<-1"
9223372036854775808
Run Code Online (Sandbox Code Playgroud)1 << -1在测试时返回true defined,无论bigint或integerpragma是否生效
> 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) 我正在尝试获取C中无符号8位类型的最高有效位。
这就是我现在正在尝试做的事情:
uint8_t *var = ...;
...
(*var >> 6) & 1
Run Code Online (Sandbox Code Playgroud)
这是正确的吗?如果不是,那会是什么?
在我的系统上,(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) …
我需要帮助解决我心中的这个问题,所以如果有人有类似的问题,这会对我有很大帮助。
signed char c=0x10;
printf("%x", c<<0x4|c>>0x4);
Run Code Online (Sandbox Code Playgroud)
为什么输出是101?
我有以下内容
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) #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
bit-shift ×10
c ×6
c++ ×3
assembly ×1
avr ×1
bitwise-and ×1
javascript ×1
operators ×1
optimization ×1
perl ×1
printf ×1
python ×1
python-3.x ×1
x86-64 ×1