upd*_*liu 47 c c++ bitwise-operators
我知道有>>符号整数的行为可以依赖于实现(具体来说,当左操作数为负时).
怎么样的人:~,>>,&,^,|?当他们的操作数有符号内建类型(整数short,int,long,long long),都将结果保证是相同的(中位含量),好像他们的类型是无符号的?
R..*_*R.. 45
对于负操作数,<<具有未定义的行为,并且结果>>是实现定义的(通常为"算术"右移).<<并且>>在概念上不是按位运算符.它们是算术运算符,相当于乘法或除以它们定义明确的操作数的2的适当幂.
对于真正的位运算符^,~,|,和&,它们在(可能促进)类型操作数的值的位表示操作.对于每个可能选择的有符号表示(二进制补码,一个补码或符号幅度),它们的结果都是明确定义的,但在后两种情况下,如果实现处理"负零",则结果可能是陷阱表示.表示为陷阱.就个人而言,我几乎总是使用带有位运算符的无符号表达式,因此结果在值而不是表示方面100%定义良好.
最后,请注意,所写的答案可能仅适用于C. C和C++是非常不同的语言,虽然我不太了解C++,但我知道它可能在某些方面与C ...
caf*_*caf 10
<<值的左移具有未定义的行为;>>负值的右移给出了实现定义的结果;&,|和^运营商在值的按位表示来定义的.C中负数的表示允许三种可能性:二的补码,一个补码和符号幅度.当这些运算符用于负值时,实现使用的方法将确定数值结果.注意,符号位1和所有值位零(对于二进制补码和符号幅度),或符号位和所有值位1(对于一些补码)的值明确允许为陷阱表示,并且在此如果您使用这些运算符的参数来生成这样的值,则行为是未定义的.
| 归档时间: |
|
| 查看次数: |
23475 次 |
| 最近记录: |