C语言几道题

分析:char类型数据表示范围为-128~+127,所以197远远超出了char类型所能表示的范围,将数据进行取反+1的操作

197的表示为1100 0101------->0011 1011------>-59(第一位为符号位,符号为1位证书,0为负数)

255的表示为1111 1111------>0000 0001-------->-1

unsigned char的表示范围为0~255,所以e和f都可以表示,g需要进行转换

-1的表示为0000 0001------>1111 1111------>255

指针和数组的区别:

1.大小不同

2.指针可以++,数组名不能动

3.访问方式不同

数组名arr表示整个数组

1.在定义数组的同一个函数中,求sizeof(arr)      (表示数组的有些奥长度)

2.在定义数组的同一个函数中,求&arr+1     (表示加上整个数组的长度)

数组的注意事项:1.越界   2.数组作为参数传递,还需要长度    3.以‘/0’结尾

关于指针的运算及数组长度计算:

int arr[10];
p = arr;
p[i] == *(p+i);  ,p[-1] == *(p-1)
*(arr+i) == arr[i];

分析:第一个40表示一个int类型4个字节,10个正好是40个字节

而1768956------->1768996增加了40个字节,表示增加了整个数组的长度。

arr[2]表示下标为2的数字,为3,p[2]表示为p[2]==*(arr+2),为3

*(arr+3)表示首地址向右移动3个位置,下标为3的数字为4,*(p+3)==p[3]为4

NULL表示数组为空,长度为4是因为数组退化为指针,指针的长度为4

分析:数组从右向左依次传入,所以也是从右向左进行运算,当i=1时,右边p[i++]为p[2]为3(后置++,先赋值在进行++,前置++,先++,再进行赋值)*p=&arr[1]则*p为2,再进行++,则p[3]=4(就近原则,进行运算)

因为10>5,所以为真,为1,又因为1>3为假,所以为0,所以输出结果为<

分析:a&&b 两个都为真,总体才为真,所以++a==++b==1,a||b,如果a为真,则成立,不用运算b,如果a为假,则对b进行判断

此时已经知道a为真,则进行下面的计算,a++和b++后都为2,对c=0进行c++运算,c==0,c++为1,所以程序的输出结果为2,2,1

分析:因为在16进制中,一个位表示4个位,左移8位则实际应该是移动16进制中的两个位数,则变为了7600,16进制的12位0012,与移动之后的7600进行|(或)运算,则输出16进制的结果变为7612

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章