无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 5887|回复: 2
打印 上一主题 下一主题

[求助] 求助:C语言64位移位问题-成功

[复制链接]
跳转到指定楼层
1#
发表于 2018-4-28 09:28:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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;
}
2#
发表于 2018-4-28 10:11:38 | 只看该作者
如果 WORD 是 16 位,那么 biBitCount 就是 16 位的,因而 (1<<(biBitCount)) 也是 16 位的。但 lpBits 是 64 位的,所以给出警告(只是提醒罢了;“警告” 不是 “错误”,编译通过了)。我猜如果你把 biBitCount 定义为 64 位整数 (比如 uint64_t 或 unsigned long long 之类的),就不会警告了。

点评

谢谢大师的解释。  详情 回复 发表于 2018-4-28 10:16
回复

使用道具 举报

3#
 楼主| 发表于 2018-4-28 10:16:41 | 只看该作者
不点 发表于 2018-4-28 10:11
如果 WORD 是 16 位,那么 biBitCount 就是 16 位的,因而 (1

谢谢大师的解释。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-18 00:42

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表