⑴ 为什么c语言的数组下标从0开始而不是从1开始
一种约定。
如果最初约定从1开始 那也没什么
至于为什么会选择从0开始,最重要的原因 我觉得是方便
对于任意的a[i] 取值的时候 都是等效于*(a+i)
a是数组首地址,这样访问第一个元素 *(a+0) 就不需要任何偏移了。
⑵ c语言 为什么第一个输出1,2 我看的是0,1 还有第二个 x1不是等于x2吗 输
第一个图:
第一个switch的第一个case后面没有break,所以做完case 0还会把下面的case 1做一遍
这时a++做了一次,b++做了两次,就是 1 , 2
第二个图:
strcmp函数判断字符串大小,先判断第一个字符的ACSII码值,如果相等就判断第二个
x1 , x2共同的部分判断都相等,但是x1更长,所以x1>x2输出一个正数(相等输出0)
⑶ C语言判断相等的语句把数字放在前面,例如if(1==len)的作用是什么
防止由于书写错误而引起的错误,比如1=len,书写的时候少写了一个等号,则len=1就认为是赋值操作,没有问题,但是1=len就会报错了。
⑷ C语言中为什么用补码表示负数,而不是直接在正数的前面加1呢
因为一个字节是八位的。我们总是利用最高位表示符号位,正数的补码是本身
举个例子,若正数0111,1111
按照你的意思,直接加1
不就变成10111,1111了嘛
还有,补码表示负数是因为计算机中的加减运算,对负数都是通过补码来运算的,通过补码的加减,得到的补码再反过来求出对应的负数,计算机中的计算只有0和1
不可能在数字前加正负号,所以负数必须用补码
⑸ c语言中的i一般是从0开始,还是1开始
具体问题具体分析:
如果对数组进行操作i一般都是从0开始,因为数组的下标是从0开始的;
比如要n的阶乘i则需要从1开始,因为0开始,任何数乘以0都等于0.
⑹ C语言中为什么用补码表示负数,而不是直接在正数的前面加1呢
因为一个字节是八位的。我们总是利用最高位表示符号位,正数的补码是本身
举个例子,若正数0111,1111
按照你的意思,直接加1
不就变成10111,1111了嘛
还有,补码表示负数是因为计算机中的加减运算,对负数都是通过补码来运算的,通过补码的加减,得到的补码再反过来求出对应的负数,计算机中的计算只有0和1
不可能在数字前加正负号,所以负数必须用补码
⑺ c语言为什么输出的是1
说起来有点麻烦的,主要是内存调用导致声明的级别(这里是int)不同;
显然级别最高的是外部声明int i=1;(假设级别为1)
而在函数调用里面只要级别跟它一样的时候(即不再对i进行再次声明,像main里面就对i进行了3次的声明,级别分别为2,3,4,因为i前面都有int还有代表级别规划的{}),此时的i==1,显然funct里面因为输出i比int i=5(级别为2)先,所以输出的是1级别的i,即为i==1.
如果你觉得难理解的话,可以看这个程序:
#include<stdio.h>
void main()
{
int i=2;
{
int i=3;
{
int i=4;
}
}
printf("%d",i);
}它输出的是2(i的级别为1,2,3)
如果只把int i=3的int去掉,它输出的是3(i的级别分别是1,1,2);
如果只把int i=4的int去掉,它输出的是2(i的级别分别是1,2,2);
反正是该死的{}和int作怪,跟i是不是外部变量没关系,看这个代码:
#include<stdio.h>
int i=1;
void f()
{
printf("%d\n",i);
int i=5;
}
void main()
{
i=2;//仅将int删了,使这里i的级别变为1
{
int i=3;
{
int i=4;
}
}
f();//所以它输出2而不是1
}
⑻ C语言中为什么用补码表示负数,而不是直接在正数的前面加1呢
因为一个字节是八位的.我们总是利用最高位表示符号位,正数的补码是本身
举个例子,若正数0111,1111
按照你的意思,直接加1
不就变成10111,1111了嘛
还有,补码表示负数是因为计算机中的加减运算,对负数都是通过补码来运算的,通过补码的加减,得到的补码再反过来求出对应的负数,计算机中的计算只有0和1
不可能在数字前加正负号,所以负数必须用补码
⑼ c语言问题:求问为什么答案第一个是1
应该是:
4,4,4
a>>2相当于a/4(也就是2 的平方)