C#和Java long是否形成交换环?
A是一种标准的数学结构,用于描述可添加和相乘的对象。C#和Java签名的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是加法恒等式)
long
s是否遵从环的所有属性?例如,与Long.MIN_值相乘是否总是关联和分配的?假设我们处于未检查的上下文中
(定义摘自维基百科) 环是一个集合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)的加性逆
- (一)⋅ (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:好的,我同意。