我必须将int向右移动一位,然后返回。
在Java中,我可以只返回n >> 1;
这在C语言中是可能的吗?
我们得到的方法如下
// Return n after a right circular 1-bit shift
unsigned int right_circular_shift_1(unsigned int n) {
最近我找到了布鲁斯·施耐尔( Bruce )的一本“应用密码”(),这本书读得很好。现在我了解了书中概述的几种算法,我想开始在C中实现其中的几种算法。
许多算法的共同点之一是将一个x位密钥分成几个较小的y位密钥。例如,Blowfish的键X是64位,但是您需要将其分解为两个32位的二分之一: Xl和Xr。
这就是我被困的地方。我在C方面相当不错,但在位运算符之类的方面,我并不是最强的。
在对IRC进行了一些帮助之后,我成功地提出了这两个宏:
#define splitup(a, b, c) {b = a >> 32; c = a & 0xffffffff; }
#defin
我运行的代码有时会产生以下结果:
UInt32 current;
int left, right;
...
//sometimes left == right and no shift occurs
current <<= (32 + left - right);
//this works
current <<= (32 - right);
current <<= left;
对于任何值>= 32,只有值% 32被移位。框架中是否发生了一些“优化”?
我在互联网上发现了这个java问题,并对它提出了一些问题。
哪些陈述是准确的:
( a) >>执行有符号移位,而>>>执行无符号移位。
( b) >>>执行有符号移位,而>>执行无符号移位。
( c) <<执行有符号移位,而<<<执行无符号移位。
( d) <<<执行有符号移位,而<<执行无符号移位。
我有点不确定有符号的移位是什么,它是否意味着它保留二进制数字的符号,而不管移位本身发生了什么(这对我来说最有意义),还是意味着MSB不会改变,除非它在s
我有以下代码:
#include <stdio.h>
int main() {
long long int x = 4294967296;
long long int y = 2^32; // 4294967296
printf("%lld \n", x);
printf("%lld \n", y);
}
它的产出如下:
4294967296
34
这是一个精心设计的示例,但如何将算术表达式强制转换为更广泛的类型?我试过
(2LL)^(32LL)
但不起作用。我和gcc一起编了64位Ubuntu。
。
//编辑
显然,我是个菜鸟,没
我对负数的右移操作很困惑,这是代码。
int n = -15;
System.out.println(Integer.toBinaryString(n));
int mask = n >> 31;
System.out.println(Integer.toBinaryString(mask));
结果是:
11111111111111111111111111110001
11111111111111111111111111111111
为什么要将负数右移31而不是1(符号位)?
如何在C中做负数的逻辑右移?基本上,我是在寻找java中>>>的C等价物
即
int one = -16711936 ;
//int two = -16711936 ;
//int three = -1;
int r, g, b;
System.out.println(Integer.toBinaryString(one));
r = one << 8;
r >>>= 24;
g = one << 16;
问题 我正在尝试使用BigInteger值在C#中实现the following Java function,以便64位限制不再适用。作为一个健全性检查,我还将使用long的原始函数转换为C#代码。然而,问题是,尽管使用long的版本可以工作,但使用BigInteger的版本并不总是返回相同的结果。 实现 原始函数在C#中的实现。 获取下一个子集(long) public static long GetNextSubset(long subset)
{
long smallest = subset& -subset;
long ripple = subset + sm
我目前正在学习按位操作符,并在"Java完整参考第九版“一书中遇到了以下示例。
我理解右移位操作符>>的作用,但我不太清楚这个示例到底是如何工作的(也许我不明白>>到底是如何工作的)。谁能给我解释一下吗?
有时,当您将值移到右边时,签署扩展值是不可取的。例如,以下程序将字节值转换为其十六进制字符串表示形式。注意,移位的值由ANDing用0x0f掩蔽,以丢弃任何符号扩展位,以便该值可用作十六进制字符数组中的索引。
// Masking sign extension.
class HexByte {
static public void main
问题:如何在Java中转换BigInteger以匹配Botan BigInt编码?
我使用Botan在Java和C++应用程序之间进行通信。Botan有一个BigInt类,类似于BigInteger。但是,当转换为字节数组时,编码不同。
在Botan中,BigInt编码如下:
void BigInt::binary_encode(uint8_t output[]) const
{
//bytes just returns the # of bytes, in my case its 32 always
const size_t sig_bytes = bytes();
for
这是我今天看到的一个C++程序:
for (int i = 0; i < LEVELS; ++i)
{
int pyr_rows = rows >> i; // what is the usage of >> i here ?
int pyr_cols = cols >> i; // why we what to use it in this way.
depths_curr_[i].create (pyr_rows, pyr_cols);
}
我好奇的是运算符>>在这里的用法。我尝试了一个简