JAVA 运算符与c++的不同

本文详细对比了JAVA与C++中运算符的区别,包括按功能分类的运算符类型和按操作数数量分类的运算符类型。特别指出C++中不存在位运算符,JAVA支持字符串连接与小数取模,而C++则不支持。此外,还深入探讨了自增运算符在不同编程语言中的行为差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JAVA 运算符与c++的不同

JAVA--按运算符的功能,将运算符分为:算术运算符、关系运算符、逻辑运算符、位运算符等
             按参与运算的操作数的个数,将运算符分为:单目运算符、双目运算符、三目运算符

C++   --  在c++中不存在位运算符。

JAVA--+号可以连接字符串  例如(abc+1+2、、、、、)  在c++中不可以连接字符串

JAVA--中取模对象可以是小数  例如(16.2%5=1.2)
C++  中  取模对象必须是整数

 

 

 

"++"在不同语言里   所表示的含义

“++ 运算符在C/C++、C#、JAVA中的差异”中的差异不是语言本身的差异,而是相应编译器的差异。

刚刚说过,i++ 与 ++i 在它们的编译器中表现是一样的,但i=i++; 与i=++i;呢 i=++i 这个没有分歧,有分歧的是i=i++ 在C/C++ 中

i=i++; i 自增前的值就是这个表达式的值,在表达式执行后 i自增1 如果 i=1 的话,i=i++ 就等于1 ,i=i++ 执行后 i=2。

int i=1;  printf("%d/n",i = i++); printf("%d/n",i);   会打印出1和2 就是说会对i先赋值,然后对i自增1。

而在C#与JAVA中  i=i++ 等于 i 的值,而 i 的值会变化但仍然是之前的值。因为C#与JAVA的编译器会严格遵循运算符优先级,首先对=右侧求值也就是 i 的值,

然后将 i 值入栈(将1入栈),之后优先级的缘故 ++ 在 = 之前执行 i 先自增1 变成2,然后将栈里的1 赋值给 i , i 这时又变回了1。

相对于C/C++的编译器来说C#与JAVA的编译器的做法更容易解释也更合理,在我看生成的汇编代码前,以为C/C++编译器也会严格遵循优先级,

故猜测是将 i 的地址入栈而不是直接将值入栈所以出现的不一致,但看过之后证明我的猜测是错误的,C/C++编译器是将值放在寄存器中,

但与C#和JAVA的编译器不同的是它未严格遵守运算符优先级,就我目前掌握到的这属于C/C++编译器undefined的范畴,

它们的执行逻辑随编译器的不同而不同。所以千万不要在C/C++程序中依赖求值顺序,否则会死的很惨

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值