相关疑难解决方法(0)

C99中"算术运算"的定义是什么?

在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).因此,必须有算术运算,而不仅仅是算术运算符的使用.

c c99 language-lawyer

13
推荐指数
1
解决办法
299
查看次数

在数组中查找唯一的数字

好吧,我必须找到数组中有多少个不同的数字.

例如,如果数组是: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)

c++ arrays for-loop numbers

5
推荐指数
3
解决办法
4万
查看次数

C ++向左移负数

如下所示,该代码有一个错误。当输入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的值是实现定义的(在大多数实现中,这将执行算术右移,因此结果保持为负数)。

在任何情况下,如果右操作数的值为负或大于或等于提升后的左操作数的位数,则该行为是不确定的。

c bit-manipulation

1
推荐指数
1
解决办法
261
查看次数

标签 统计

c ×2

arrays ×1

bit-manipulation ×1

c++ ×1

c99 ×1

for-loop ×1

language-lawyer ×1

numbers ×1