开发者社区> 问答> 正文

M$ C编译器里unsigned long long的一个问题:报错

#include <stdio.h>

int main() {
	unsigned long long testvar;
	int i = 31;
	testvar = 0x7FFFFFFF;
	testvar |= ( unsigned long long )( 1 << i );
	printf("%llX",testvar);
	return 0;
}
期望的输出是 00000000FFFFFFFF ,但实际的输出是 FFFFFFFFFFFFFFFF 编译参数是 cl /nologo /Gz /MD /Z7 /Tc test.c /link /nologo /subsystem:console 版本信息 Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 for 80x86 求教各位大神:怎么写才能使赋值后的testvar符合我期望的值? 不可去掉或操作,不能更换编译器(我不会写GCC的内嵌汇编,项目需要内嵌)

展开
收起
kun坤 2020-06-09 12:08:41 678 0
1 条回答
写回答
取消 提交回答
  • testvar |= ( unsigned long long )( 1 << i );
    改为testvar |=( ( unsigned long long ) 1) << i ;
    或者testvar |= ( unsigned long long )( 1UL<< i );
    原因嘛:因为int的第31位是符号位 ######赞!cdq指令已经被替换为一个函数调用了

    2020-06-09 12:08:47
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载