牛客上刷题的时候,碰上了一道如下所示的题目:1
2
3
4
5
6int main()
{
unsigned char i = 1;
i -= 4;
printf(“the value of i is: % d”, i);
}
请问i的值是:
A.253
B.254
C.255
D.256
正确答案是:A:253
刚开始做这个题的时候没多大注意,普通的类型转换无符号数的加减。
然而,我选择的254是错误的。
more >>
不念过去,不畏将来
有这么一道题目:
32位的机器下,下面说法哪些是正确的?
signed char a = 0xe0;
unsigned int b = a;
unsigned char c = a;
A. a>0 && c>0
B. a==c
C. b的十六进制的表示是:0xffffffe0
D. 以上说法都是错误的
解析:
more >>A错,signed char比较时候类型要提升成int,符号位是补最高位的1,所以a应该是负数
B错:当进行==比较时,char类型的a和c都要要先提升成int类型才进行比较,a转换成int后是0xffffffe0,它是一负数,而c转化成int之后是0x000000e0,是一正数,很明显不相等。
C对:signed char先转化成int类型再转化成unsigned int类型,signed char转化成int时候要进行符号扩展,因为是有符号类型,所以最高位就是补1.
作用:屏蔽掉编译器为变量设定的默认的对其方式,设定自己的对其方式
而#pragma pack(n)
表示设定变量以n字节对其。
结构体的总大小也有个约束条件:
举例说明:1
2
3
4
5
6
7
8
9
10
11#pragma pack(push) //保持对齐状态
#pragma pack(4) //设定为4字节对齐
strust test
{
char m1;
double m4;
int m3;
}
#pragma pack(pop) //恢复对齐状态
在一个class及其继承类中,不但有父类,还有类的成员,还有子类。那么父类的构造函数,成员变量的构造函数以及子类的构造函数的顺序是怎么样的,有以下例题:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36# include <iostream>
using namespace std;
class A
{
public:
A() { cout<<"create A"<<endl; }
A(const A& other){ cout<<"copy A"<<endl;} //复制构造函数
~A() { cout<<"~A"<<endl; }
};
class C
{
public:
C() { cout<<"create C"<<endl; }
C(const A& other){ cout<<"copy C"<<endl;} //复制构造函数
~C() { cout<<"~C"<<endl; }
};
class B:public A
{
public:
B()
{
cout<<"create B"<<endl;
}
~B()
{
cout<<"~B"<<endl;
}
private:
C _a;
};
int main(void)
{
B b;
cout<<"------------------------"<<endl;
}
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true