c中按位或运算符的结果

问题描述 投票:0回答:3

我有一个关于按位OR的问题|从c到锈的运算符。

我有很多将c转换为rust的定义,但我不确定SEFLG_ASTROMETRIC标志。

#define SEFLG_JPLEPH    1       /* use JPL ephemeris */
#define SEFLG_SWIEPH    2       /* use SWISSEPH ephemeris */
#define SEFLG_MOSEPH    4       /* use Moshier ephemeris */

#define SEFLG_HELCTR    8      /* heliocentric position */
#define SEFLG_TRUEPOS   16     /* true/geometric position, not apparent position */
#define SEFLG_J2000 32     /* no precession, i.e. give J2000 equinox */
#define SEFLG_NONUT 64     /* no nutation, i.e. mean equinox of date */
#define SEFLG_SPEED3    128    /* speed from 3 positions (do not use it,
                                * SEFLG_SPEED is faster and more precise.) */
#define SEFLG_SPEED 256    /* high precision speed  */
#define SEFLG_NOGDEFL   512    /* turn off gravitational deflection */
#define SEFLG_NOABERR   1024   /* turn off 'annual' aberration of light */
#define SEFLG_ASTROMETRIC (SEFLG_NOABERR|SEFLG_NOGDEFL) /* astrometric position,
                                * i.e. with light-time, but without aberration and
                    * light deflection */
#define SEFLG_EQUATORIAL (2*1024)    /* equatorial positions are wanted */
#define SEFLG_XYZ   (4*1024)     /* cartesian, not polar, coordinates */
#define SEFLG_RADIANS   (8*1024)     /* coordinates in radians, not degrees */
#define SEFLG_BARYCTR   (16*1024)    /* barycentric position */
#define SEFLG_TOPOCTR   (32*1024)    /* topocentric position */
#define SEFLG_ORBEL_AA SEFLG_TOPOCTR /* used for Astronomical Almanac mode in
                                      * calculation of Kepler elipses */
#define SEFLG_SIDEREAL  (64*1024)    /* sidereal position */
#define SEFLG_ICRS  (128*1024)   /* ICRS (DE406 reference frame) */
#define SEFLG_DPSIDEPS_1980 (256*1024) /* reproduce JPL Horizons
                                      * 1962 - today to 0.002 arcsec. */
#define SEFLG_JPLHOR    SEFLG_DPSIDEPS_1980
#define SEFLG_JPLHOR_APPROX (512*1024)   /* approximate JPL Horizons 1962 - today */

1024 | 512

我尝试使用我的mac 1024或512的计算器,结果为1536。此结果正确吗?

c bit-manipulation logical-operators
3个回答
0
投票

是的,这是正确的。

512 =01000000000
1024=10000000000
 10000000000
|01000000000
=11000000000=1536

0
投票

总之-是的。请注意,1024512在同一位置没有“ 1”位,因此按位“或”运算的结果与将它们相加的结果相同。


0
投票

是的,结果是正确的:实际上,对1024和512进行或运算得出的数字与将它们相加的数字相同。

这是对两个OR进行幂运算的便捷“捷径:由于它们的数字永远不会占据相同的位置,所以加法与“ OR”相同。

© www.soinside.com 2019 - 2024. All rights reserved.