【问题标题】:Bitwise operation between int and longint 和 long 之间的按位运算
【发布时间】:2015-04-14 15:29:56
【问题描述】:

我已经搜索了有关此的文档,但我似乎没有找到任何东西。如果我有一个int 和一个long,如何定义按位运算? int是不是刚刚在操作前填充了?

例如:

int a;
long b;

// Do something with a and b

return a | b;

我对 Java 和 C# 都感兴趣。

【问题讨论】:

  • 在c#中,在应用运算符之前,int会隐式转换为long。所以,你确实在处理两个长数字。
  • 每个 VS 安装都包含 C# 语言规范:你试过阅读它吗? (任何 C# 答案最终都将是规范中的任何内容。)
  • Otherwise, if either operand is of type long, the other is converted to long.§5.6.2§15.22.1
  • 在 Java 中,int 将首先转换为 long。如果它是负数,它将用1 填充,否则用0 填充。

标签: java c# interop bitwise-operators


【解决方案1】:

对于 C#,C# V5 规范(包含在 VS 2013 中)说:

  1. 在 §7.11.1 中定义了可用的运算符:
int operator |(int x, int y);
uint operator |(uint x, uint y);
long operator |(long x, long y);
ulong operator |(ulong x, ulong y);

所以没有混合类型的二进制或版本。

  1. 在第 6.12 节“6.1.2 隐式数字转换”中,定义了以下隐式(即由编译器自动应用)转换:
  • intlongfloatdoubledecimal
  • […]
  • longfloatdoubledecimal

所以,intlong 可用,但反之则不行。

即。编译器会将a 转换为long,然后将二进制或两个long 转换为long 结果。

正如问题的 cmets 中所述,对于 Java 也是如此。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多