C#难道不支持long 的移动位操作

anlun 2015-04-13 10:53:24
long workerIdBits = 5L;
long maxWorkerId = -1L ^ (-1L << workerIdBits);

直接报错
错误 1 运算符“<<”无法应用于“long”和“long”类型的操作数

该如何解决
...全文
377 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjq 2015-04-13
  • 打赏
  • 举报
回复
你位移偏移量为什么要定义成long?有什么必要?你的被操作数是long,那么也就64位,位移量最大值也就64了,int都足够足够了吧。
Poopaye 2015-04-13
  • 打赏
  • 举报
回复
workerIdBits只能是int
Forty2 2015-04-13
  • 打赏
  • 举报
回复
int workerIdBits = 5; long maxWorkerId = -1L ^ (-1L << workerIdBits); long也就64位,左移64次以上(workerIdBits > 64)就没有实际意义了。
anlun 2015-04-13
  • 打赏
  • 举报
回复
并且本人系统是win2008 64位
anlun 2015-04-13
  • 打赏
  • 举报
回复
不是操作系统问题.net应该是平台无关long型无论在 64位系统 32位系统都是64位
anlun 2015-04-13
  • 打赏
  • 举报
回复
同志啊解决问题为先, java的long 64位一样移位 这在java中完全ok
qq_26720571 2015-04-13
  • 打赏
  • 举报
回复
偏移量定义为 long,你想位移多少位?
xuzuning 2015-04-13
  • 打赏
  • 举报
回复
类型 long 范围 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 大小 有符号 64 位整数 .NET Framework 类型 System.Int64 位移操作是在 CPU 寄存器中直接实现的 如果报错 运算符“<<”无法应用于“long”和“long”类型的操作数 应该是你的操作系统不是真64位的(而是准64位的) 你可以用乘2和除2来代替,比较好的做法是分成两段分别处理 这要看实际用途了
  • 打赏
  • 举报
回复
你搞清楚了位移吗?还有不够用的概念!
引用 6 楼 anlun 的回复:
int 不够用所以 long
anlun 2015-04-13
  • 打赏
  • 举报
回复
int 不够用所以 long
本拉灯 2015-04-13
  • 打赏
  • 举报
回复
int
  • 打赏
  • 举报
回复
怎么可能左移long那么多位……
anlun 2015-04-13
  • 打赏
  • 举报
回复
int64 也不能 int 为32位

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧