day02

day01作业:

1、short 有符号和无符号的取值范围?
short 两个字节(16位)
无符号数
最小: 0000 0000 0000 0000 0
最大: 1111 1111 1111 1111 65535
注意:可以使用等比数列求和公式计算

有符号数
最小: 1111 1111 1111 1111 -32768
(负数的0人为定义为-32768)
最大: 0111 1111 1111 1111 32767

2、short b;b=50000;printf("%d\n",b); -----> -15536
分析过程如下:
32769 2 -32768+(2)-1 -32767

50000 50000-32767 -32768+(50000-32767)-1 -15536

3、计算sizeof(stu1)=44
struct stu2{
int a; 4
char c; 4
int b; 4
short e; 4 (sizeof(short)+2*sizeof(char))
char arr[5]; 4
};
struct stu1{
short e; 4
int f[10]; 40
struct stu2 stu;
};

4、端序问题(方式1 union 方式二 指针 (待续))

union test{
        char a[4];
        int i;
    };
int checkCPU()
{
    union test t;
    t.i=0x12345678;//数据的低位
    if(t.a[0]==0x78)
        return 1;
    else
        return 0;
}
void main()
{
    if(checkCPU()==1)
        printf("小端对齐\n");//低地址对应低位
    else
        printf("大端对齐\n");//高地址对应低位
}

整数溢出补充

类比:溢出情况类似于汽车里程表,溢出之后返回起始点。
计算一个整数的时候超过该整数所能容纳的最大单位后,会发生溢出,高位舍弃(其实就是当一个较大的整数赋值给一个较小的整数)

unsinged short a=0xffff;
a=a+1;
//a=a+100
printf("%d\n",a);

当一个小的整数(负数)赋值给一个较大的整数时,符号位保留。

    short ab=-2;
    i=ab;
    printf("%x\n",i);

    unsigned short m_a=0;
    m_a=m_a-1;
    printf("%d\n",m_a);

    char ch=-1;
    printf("%x",ch);

字符型 char与 unsinged char

unsinged char ch=0;
ch-=1;
printf("%d\n",ch);   //255
转义字符参照课件

浮点数 float(4) double(8)

浮点数的效率低,避免使用,内存中不是单纯的补码运算。
思考:比较两个浮点数的大小。

printf 使用方式参照课件

scanf

注意事项:
char arr[100]={0};
scanf("%s",arr);//输入一个字符串,以回车键,空格作为字符串结束标识
printf("%s",arr);

//注意缓冲区溢出
char s[10]={0};    
scanf("%s",s);    //--->输入asdffghhjjkk;lhjjjjj    会崩溃
//解决方式:调整数组的大小或者使用fgets(文件部分讲解)

 char str[10]={0}; 
 scanf("%s",str);//he ha hou
 printf("%s",str);//输出he

//验证残留的信息ha hou是存在于stdin流中,而不是在键盘缓冲区中
 char str[20];
 char str1[20]; 
 char str2[20];
 scanf("%s",str);/*此处输入:he ha hou */
 printf("%s",str); 

 scanf("%s",str1);/*无需再输入,对stdin流再扫描 */ 
 scanf("%s",str2);/*无需再输入,对stdin流再扫描 */
 printf("\n%s",str1);
 printf("\n%s",str2);

//键盘缓冲区残余信息问题
int a;
char c;
scanf("%d",&a);
scanf("%c",&c);//认为回车作为输入了
printf("a=%d c=%c\n",a,c);

//解决方式1:getchar();
//解决方式2:fflush(stdin);

运算符 其余参照课件

++ --

分析:
i.png
 int i=5;
 int a=i++ + ++i;
 printf("%d\n",a);   //a=12    不区分编译器
//分析:
//相当于
// i=i+1;
//int a=i+i;
//i=i+1;
//也可以这样理解,运算顺序是自右向左的,先计算++i,暂时不入栈,
//统一将所有++i计算完成后一起入栈,这里就是6先进栈,之后计算i++,先进行赋值,因此6也进栈了,之后i+1=7.
 int a=++i + ++i;  
//备注:以VS为基准。

int j=0;
int m=1;
j=(++m)+(++m)+(++m);
j=(++m)+(++m)+(m++);
j=(m++)+(m++)+(m++);
j=(m++)+(m++)+(++m);
//对于不同的编译器,同一行中出现了多次的++的行为不定, (++i)+(++i)+(++i)执行的顺序可能不同,不深究。

int a=++m;
int b=++m;
int c=++m;
j=a+b+c            //j=9;
条件运算符

等价于if语句,参照课堂Code

逗号表达式 参照课堂Code

用法:先计算左边的值,在计算逗号右边的值,最后取右边的结果。

逻辑运算符 参照课堂Code
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容