C#和Java long组成一个交换环吗



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


(从维基百科复制的定义)

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

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

交换环是乘法是可交换的(意思是A·b=b·A)。

在溢出被定义为包装的有符号值的平台上,有符号和无符号值在馈送到+-*&^|<<~运算符时,或在对较小类型执行未检查的强制转换时,将以同构的方式表现。当与关系运算符>>%/运算符一起使用时,以及当强制转换或提升为较大类型时,它们的行为会有所不同。

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

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

最新更新