c语言新手提问 如何定义数组下标为负数的数组

c语言新手提问 如何定义数组下标为负数的数组,第1张

下表为负的数组在 C 语言里并不是不能做到。

首先,创建一个正常的数组 int A[20];。然后用指针指向其中间的元素 int A2 = &(A[10]);

这样,A[-10 9] 就是一个可用的有效范围了。

/ 样例示范 /
#include <stdioh>
int main(int argc, const char argv[])
{
    int A[20], A2 = &(A[10]), i;
    
    for(i=0; i<20; i++) A[i] = i2;
    
    for(i=-10; i<10; i++) printf("%d\n", A2[i]);
    
    return 0;
}

1负数在现代计算机里一般用补码表示,为什么呢?原因是:保证0的左右不矛盾
1是0001,推算出0是0000;
-1的是1111,推算出0也是0000。
如果直接用反码(0变成1,1变成0)那么0就会有两个结果。
如果用第一位表示符号,后三位表示大小,那么就有空间浪费。
2char类型是8位,1000 0000还原为原码:
最高位是1,表示负数,剩余的各位取反 111 1111 再+1 得到 1000 0000, +128的原码,整个数为-128

和其前后的其他语句有关,没有代码说不清。
补充代码后,继续回答:
你的程序中
for
(c=1;c<=20;++c)
{
k
=
(float)(a)/b
+
k;
c
=
a;
a
=
a
+
b;
b
=
-c;
}
这段循环中,在}前加上printf("%d
",
c);,你会发现
C值依次为2,3,1,-2,-3,-1,2,3,1死循环。
可改成
t=1;
while
(c<=20)
{
k
=
t(float)(a)/b
+
k;
c
=
a;
a
=
a
+
b;
b
=
c;
t=-1t;
}

在C语言中,输出负号的方法有以下几种:
1 直接输出负号字符:可以使用printf()函数直接输出负号字符“-”,例如:
```c
printf("负数为:-10");
```
2 使用"%d"格式化符号输出负数:使用“%d”格式化符号输出负数时,程序会自动将负数的符号输出为负号“-”,例如:
```c
int num = -10;
printf("负数为:%d", num);
```
3 使用"%u"格式化符号输出无符号整数:使用“%u”格式化符号输出无符号整数时,程序会将负数转换为无符号整数再进行输出,因此会输出负数对应的补码形式。如果需要输出负号,可以通过在数值前面添加负号“-”来实现,例如:
```c
int num = -10;
printf("负数为:%u", -num);

8进制和16进制无符号(unsigned)类型
用0表示八进制数,如0123表示八进制数123
用0x表示16进制数,如0x1a表示16进制数1A
八进制数和16进制数都可存放于unsigned int中
输出时,八进制标识符%o 16进制%x

C语言中用scanf()输入负数和输入整数是一样的,举个例子int a;
scanf(&a);把输入的数存入变量a中 , 这个int就是有符号整形数,既可以是负数也可以是正数, 如果你定义成unsigned int a ;那么就只能输入正数了,因为是无符号的也就是范围是大于等于0的。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/10323910.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-07
下一篇 2023-05-07

发表评论

登录后才能评论

评论列表(0条)

保存