C#和Java long是否形成交换环?

C#和Java long是否形成交换环?,java,c#,language-lawyer,integer-overflow,Java,C#,Language Lawyer,Integer Overflow,A是一种标准的数学结构,用于描述可添加和相乘的对象。C#和Java签名的longs是否遵从环的所有属性?例如,与Long.MIN_值相乘是否总是关联和分配的?假设我们处于未检查的上下文中 (定义摘自维基百科) 环是一个集合R,它配备了二进制运算+和·满足以下三组公理,称为环公理 R是加法下的阿贝尔群,意思是 (a+b)+c=a+(b+c)对于R中的所有a、b、c(+是关联的) a+b=b+a对于所有a,R中的b(+是可交换的) R中有一个元素0,使得R中所有a的a+0=a(0是加法恒等式)

A是一种标准的数学结构,用于描述可添加和相乘的对象。C#和Java签名的
long
s是否遵从环的所有属性?例如,与Long.MIN_值相乘是否总是关联和分配的?假设我们处于未检查的上下文中


(定义摘自维基百科)

环是一个集合R,它配备了二进制运算+和·满足以下三组公理,称为环公理

  • R是加法下的阿贝尔群,意思是
    • (a+b)+c=a+(b+c)对于R中的所有a、b、c(+是关联的)
    • a+b=b+a对于所有a,R中的b(+是可交换的)
    • R中有一个元素0,使得R中所有a的a+0=a(0是加法恒等式)
    • R中的每个a都存在−R中的a使得a+(−a) =0(−a是a)的加性逆
  • R是乘法下的幺半群,意思是:
    • (一)⋅ (b)⋅ c=a⋅ (b)⋅ c) 对于R中的所有a、b、c(⋅ 是关联的)
    • R中有一个元素1,因此⋅ 1=a和1⋅ 对于R中的所有a,a=a(1是乘法恒等式)
  • 乘法相对于加法是分配的:
    • a⋅ (b+c)=(a)⋅ b) +(a)⋅ c) 对于R中的所有a,b,c(左分配)
    • (b+c)⋅ a=(b)⋅ a) +(c)⋅ a) 对于R中的所有a,b,c(右分配)

  • 交换环是乘法可交换的环(意思是交换环)⋅ b=b⋅ a) .

    至少根据Java的溢出规则,有符号长的加法、减法和乘法完全等同于将64位视为64位无符号值,这与将它们视为mod 2^64的整数相同,这足以证明这一说法。

    在平台上,有符号值被定义为溢出,有符号值和无符号值在馈送到
    +
    -
    *
    &
    ^
    ,和
    /
    运算符,以及在强制转换或升级到更大类型时


    因为任何给定大小的无符号值都会表现为一个环,所以有符号值也会表现为一个环。注意,由于对
    int
    的隐式提升,较小的类型可能不一定表现为算术环,因为将
    +
    *
    应用于此类类型的某些值可能会产生非该类型的值。

    根据long,它们至少是分配的和交换的。@Cristik-肯定不是数学。我认为这是一个合适的地方。。。也许程序员也同样优秀,CS很可能是边界线ok。@HovercraftFullOfEels:但在溢出算法中,它们确实属于集合。@OliverCharlesworth:好的,我同意。