我必须将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
我对负数的右移操作很困惑,这是代码。
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;
问题:如何在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);
}
我好奇的是运算符>>在这里的用法。我尝试了一个简
我必须将3个数字编码成相同的整数。
我有这三个尺寸
uint256 carLength;
uint256 carWidth;
uint256 carDepth;
我想要将这3个数字编码成相同的整数,以便解码。我的问题是,我在这么低的水平上没有太多的经验。
我想像这样的函数
function encodeNumbers(uint256 a, uint256 b, uint256 c) public view returns(uint256);
function decodeNumber(uint256) public view returns (uint256, uint256, uint25
我有一个AppleScript打开一个Safari网页进入阅读器视图,然后保存为一个PDF。
我希望它保存为PDF的默认文件名,但总是在同一个特定的位置。我不知道该怎么做。
当前,AppleScript以如下方式运行:
tell application "System Events"
tell application process "Safari"
set frontmost to true
repeat until window 1 exists
end repeat
# Render page in Safari Rea
我不是受过训练的计算机科学家,所以我不知道编译等的全部或大部分细节,但我一直认为我的c程序被编译成机器代码,我可以用gcc的-S标志来查看。
我还认为,我的代码越接近机器代码,计算机执行它的速度就越快。所以我决定测试这个。
我编写了两个测试文件来计算一个简单的算术问题。
// test1.c
int main(int argc, char* argv[]){
int x = 4243;
int y = 3235;
int z = 613*x + 725*y;
return 0;
}
// test2.c
int main(int argc, char* arg
我在Linux上使用GCC编译器。
我想使用64位编译器并使用-m32选项构建一些文件(32位兼容性)。我发现编译器的行为很奇怪。
我的代码很简单:
int main () {
int test =(((0) & 0x00000000) << (32));
return 0;
}
对于这段代码,我收到了关于32、64和64以及-m32编译器的警告:
warning: left shift count >= width of type [enabled by default]
但是当我试图从assebmly code编译它的时候
.quad (((0) &a