在C99中,术语算术运算出现了16次,但我没有看到它的定义.
术语算术运算符仅在文本中出现两次(同样没有定义)但它确实出现在索引中:
算术运算符
添加剂,6.5.6,
G.5.2按位,6.5.10,6.5.11,6.5.12
递增和递减
,6.5.2.4,6.5.3.1乘法6.5.5,G.5.1
移位,6.5.7
一元,6.5. 3.3
然后我们将+ - | &(二进制)++ -- *(二进制)/ % << >> ~作为算术运算符,如果索引被认为是规范的!
也许我们应该将算术运算识别为算术运算符的使用.但F9.4.5表示该sqrt()功能也是算术运算,详情请参考IEC 60559(又名IEEE754).因此,必须有算术运算,而不仅仅是算术运算符的使用.
好吧,我必须找到数组中有多少个不同的数字.
例如,如果数组是:1 9 4 5 8 3 1 3 5
输出应为6,因为1,9,4,5,8,3是唯一的,1,3,5是重复的(不是唯一的).
所以,这是我的代码到目前为止.....没有正常思考.
#include <iostream>
using namespace std;
int main() {
int r = 0, a[50], n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
for (int j = 0; j < n; j++) {
for (int k = 0; k < j; k++) {
if (a[k] != a[j]) r++;
}
}
cout << r << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud) 如下所示,该代码有一个错误。当输入a = -1,b = 1时,其中一行存在运行时错误。您能否帮助我了解(a和b)如何变成INT_MIN?
据我了解,-1表示为32位二进制格式0xFFFFFFFF,而1表示为32位格式0x00000001,因此(-1&1)将变为0x00000001。而且我的python命令还显示了'0b1'作为结果。为什么报告INT_MIN错误?
int getSum(int a, int b) {
while (b != 0) {
int carry = (a & b) << 1;//BUG! left shift of negative value -2147483648
a = a ^ b;
b = carry;
}
return a;
}
Run Code Online (Sandbox Code Playgroud)
更新:是否正确定义了负数的右移?只要满足以下要求,就可以右移负数。
从cppreference.com,
对于无符号a和具有非负值的带符号a,a >> b的值是a / 2b的整数部分。对于负数a,a >> b的值是实现定义的(在大多数实现中,这将执行算术右移,因此结果保持为负数)。
在任何情况下,如果右操作数的值为负或大于或等于提升后的左操作数的位数,则该行为是不确定的。