无忧启动论坛

标题: 求助:C语言64位移位问题-成功 [打印本页]

作者: wynew8au    时间: 2018-4-28 09:28
标题: 求助:C语言64位移位问题-成功
本帖最后由 wynew8au 于 2018-4-28 10:03 编辑

VS2017 显示
warning C4334: “<<”: 32 位移位的结果被隐式转换为 64 位(是否希望进行 64 位移位?)

已经成功,强制转换为 unsigned long

求助大师,这个 64 位移位 究竟怎么移?

#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
using namespace std;
int main()
{
BYTE xx=2;
LPBYTE   lpBits=&xx;
WORD     biBitCount=1;
lpBits += (1 << (biBitCount));
        cout<<"Hello World!"<<endl;
        //cout<<lpBits<<endl;
        system("pause");
    return 0;
}

作者: 不点    时间: 2018-4-28 10:11
如果 WORD 是 16 位,那么 biBitCount 就是 16 位的,因而 (1<<(biBitCount)) 也是 16 位的。但 lpBits 是 64 位的,所以给出警告(只是提醒罢了;“警告” 不是 “错误”,编译通过了)。我猜如果你把 biBitCount 定义为 64 位整数 (比如 uint64_t 或 unsigned long long 之类的),就不会警告了。
作者: wynew8au    时间: 2018-4-28 10:16
不点 发表于 2018-4-28 10:11
如果 WORD 是 16 位,那么 biBitCount 就是 16 位的,因而 (1

谢谢大师的解释。




欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) Powered by Discuz! X3.3