首页 > 代码库 > C 中细节问题的试题

C 中细节问题的试题

下面函数的功能是什么?仔细分析!

#include<stdio.h>
#include<Windows.h>

//函数的功能 
//  a<0 输出0
// 0<=a<=255 输出  a
// a>255   输出255
unsigned char function(int a)
{
    if(a&(~0xff))
    {
        return (-a)>>31;

    }else
    {

        return a;
    }

}
int main()
{  
    int   n=0;
    n=function(-55); 
    printf("%d\n",n);
    
    system("pause");
    return 0;
}

下面的代码的有结果吗?为什么?

int a=1;
a+=++(a++);
//此时a的值是多少?

解析:编辑错误,数值不能进行自增运算。

 

Question:若一个视频中图像分辨率为1920*1080,每像素采样精度为16-bit,每秒25帧图像,则每秒图像占内存1920*1080*25*16)/8_byte(所有数据连续存放)

 16-bit=2byte    1920*1080表示的是像素点 

图像分辨率之1080P与1080i

int16_t  x=32767; x++;  printf("%d",x);输出的结果是什么?

int16_t  x=32767;   // -32768  why????  
//
//16位int范围-32768~32767
x++; printf("%d",x);

 上面的问题可以和下面的问题同解:

int x=-32769;
printf("%d",x);
//为什么输出的结果是32767?
这是int型数据溢出的问题,16位int范围-32768~32767

所以-32769超出了int范围,-32768多减一个就变成了32767
如何理解多减一个:可以往数的进制上面考虑,不够就往回挪了一个(自己的理解)

C 中细节问题的试题