首页 > 解决方案 > C 赋值语句中附加的零是什么意思?

问题描述

我写信是为了询问一个关于有线 C 语句的快速问题。以下语句可在 libgcrypt 1.7.3 的 mpi/mpi-pow.c 的第 680 行中找到。

base_u_size |= (precomp_size[k] & ((mpi_size_t)0 - (k == e0)) );

所以后面的附加0mpi_size_t我来说似乎很连贯。我还展示了以下汇编代码序列,它对应于这个源代码语句:

              mov    -0x138(%ebp),%eax
              mov    -0x48(%ebp,%eax,4),%edx
              mov    -0x138(%ebp),%eax
              cmp    -0x114(%ebp),%eax  <----- eax = k, -0x114(%ebp) = e0
              jne    80b84b2 <_gcry_mpi_powm+0xeee>
              mov    $0xffffffff,%eax
              jmp   80b84b7 <_gcry_mpi_powm+0xef3>
     80b84b2: mov    $0x0,%eax
     80b84b7: and    %edx,%eax

所以不知何故0不会在这里产生任何影响?

标签: c

解决方案


所以在后面附加 0mpi_size_t

这称为类型转换

根据定义,整数常量值的类型为int. 要明确地为 type mpi_size_t,您将值转换为所需的类型。


推荐阅读