相关疑难解决方法(0)

移位32位变量32位有什么不好?

我最近选择了Bruce Schneier的应用密码学副本,这是一本很好的阅读.我现在明白本书中概述的几种算法是如何工作的,我想在C中开始实现其中的一些算法.

许多算法的共同点是将x位密钥分成几个较小的y位密钥.例如,Blowfish的密钥X是64位,但是你需要将它分成两个32位的一半; Xl和Xr.

这是我陷入困境的地方.我对C相当不错,但对于按位运算符等,我并不是最强的.

在获得IRC的一些帮助后,我设法提出了这两个宏:

#define splitup(a, b, c) {b = a >> 32; c = a & 0xffffffff; }
#define combine(a, b, c) {a = (c << 32) | a;}
Run Code Online (Sandbox Code Playgroud)

其中a是64位,b和c是32位.但是,编译器警告我,我正在将32位变量移位32位.

我的问题是这些:

  • 移位32位变量32位有什么不好?我猜它是未定义的,但这些宏似乎确实有效.
  • 另外,你会建议我采取另一种方式吗?

正如我所说的,我对C非常熟悉,但是按位操作符等仍让我头疼.

编辑

我发现我的组合宏实际上并没有组合两个32位变量,而只是简单地将0和0相加,并得到一个结果.
所以,除了我以前的问题,我仍然没有一种方法将两个32位变量组合起来得到一个64位变量; 关于如何做到这一点的建议将不胜感激.

c bit-manipulation 32bit-64bit

20
推荐指数
2
解决办法
1万
查看次数

将32位整数移位32位

我正在抛出一些C代码,我需要将32位int 32位移位.当我使用参数n = 0运行此代码时,不会发生移位.

int x = 0xFFFFFFFF;
int y = x << (32 - n);
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用?

c bits bit-shift low-level

4
推荐指数
1
解决办法
2451
查看次数

标签 统计

c ×2

32bit-64bit ×1

bit-manipulation ×1

bit-shift ×1

bits ×1

low-level ×1