C ++ uint64_t按位并检查偶数

时间:2016-03-09 23:20:50

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

我有以下代码只是检查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;

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

2 个答案:

答案 0 :(得分:5)

x&(1ULL==0ULL)相当于(x&1ULL)==0ULL。您需要{{1}}。

答案 1 :(得分:0)

#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;
}

我认为这对我来说无论如何都有效