【问题标题】:C++ uint64_t bitwise AND check for even numberC++ uint64_t 按位与检查偶数
【发布时间】:2016-06-24 14:22:33
【问题描述】:

我有以下代码仅检查 uint64_t 是否为偶数,我打算使用按位 AND 操作进行检查,但它似乎不起作用。

这是我认为首先会起作用的代码:

int n;
scanf("%d",&n);
for(int i = 0; i < n; i++){
    uint64_t s,d;
    scanf("%llu %llu",&s,&d);
    //try for x
    uint64_t x;
    bool stop = false;
    x = s + d;
    printf("%llu",x&1ULL); \\ This prints 0 when the number is even but
    if(x&1ULL==0ULL){ \\ This check always returns false
        printf("%llu",x);
        x/= 2;

如果数字是奇数或偶数,此代码始终打印出 0 或 1,但 if 语句始终返回 false。我究竟做错了什么?谢谢

【问题讨论】:

  • 如果您不确定运算符的优先规则,请在括号中加上。另外,如果你确定的话。
  • 如果这是 C++,为什么不使用std::cin?这是 100% 的 C 代码。
  • @tadman 有些人喜欢 iostream,有些人讨厌它,有些人又爱又恨。使用旧的 api 没有错。
  • 您遇到了运算符优先级问题。
  • @tadman 在这种情况下,这个程序是用于编程竞赛的,所以我使用 printf、scanf 和按位运算,因为它们要快得多,不过你是对的,一般情况下我会使用 cin

标签: c bit-manipulation bitwise-operators bitwise-and uint64


【解决方案1】:
#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
#include <stdint.h>



int main()
{
    int n;
    scanf_s("%d", &n);
    for (int i = 0; i < n; i++) {
        uint16_t  s, d;
        scanf_s("%llu %llu", &s, &d);
        //try for x
        uint16_t x;
        bool stop = false;
        x = s + d;
        printf("%llu", x & 1ULL);
        if ((x & 1ULL) == 0ULL) {

            printf("%llu", x);

            x /= 2;
        }
    }
    return 0;
}

我认为这对我来说应该可以正常工作

【讨论】:

    【解决方案2】:

    x&amp;1ULL==0ULL 等价于x&amp;(1ULL==0ULL)。你需要(x&amp;1ULL)==0ULL

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      • 1970-01-01
      • 2018-07-11
      • 2016-10-31
      • 1970-01-01
      • 2012-01-21
      相关资源
      最近更新 更多