1. 请问i的值是:253
#includeint main(){ unsigned char i = 1; //i为无符号数! i -= 4; printf("the value of i is: %d" , i); }
计算机在计算减法时是将负数转换成对应的补码进行运算,通过这种方法,可以将减法运算转换成加法运算。
因此实际计算的是 i+(-4)的计算。i=1 :0000 0001
-4作为负数,在计算机中是以补码的形式参与运算。
[ -4 ]原=1000 0100;[ -4 ] 反 =1111 1011;[ -4 ] 补 =1111 1100
i+(-4)=0000 0001+1111 1100=1111 1101=253
简便:1-4=-3,-3的补码表示为1111 1101,由于为无符号数,因此首位为数值位,结果=253。
2. C语言系统中,如果int型数据占2个字节,则说明该系统是16位的系统,此时double型数据占8个字节,long型数据占4个字节,unsigned int占2个字节,char型数据占1个字节。
3. 宏定义在预处理(编译之前)阶段展开,不做语法检查且在代码中直接替换。编译的工作之一是语法检查。
4. C++中,如果一个类A为空(无类成员),那么sizeof(A) = 1,而不是0。对于实例化的A对象:A a; sizeof(a) = 1。C++中的成员函数都不占用类的空间。
如果类中存在虚函数virtual,那么编译器会生成一个指针指向虚函数表VTable。32bit下,指针大小为4字节;64bit下,指针大小为8字节。
类中的静态数据成员不占字节,它不属于任何一个该类的实例化对象,可以通过类名+作用域直接访问,也不算在类的字节里。
5. HTML的< >&"©分别是<,>,&,",©;的转义字符。
6. 单个字符输入:getchar( ) = getc( stdin ) = fgetc( stdin )
单个字符输出:putchar( ) = putc( c,stdout ) = fputc( c,stdout )
字符串行输入:gets( str) = fgets( str,stdin)
字符串行输出:puts( str) = fputs( str,stdin)
7. 如下代码:
#include#include using namespace std; int main() { const char* s1 = "ABCDEF"; char s2[] = "ABCDEF"; char s3[] = { 'A','B','C','D','E','F' }; cout << "sizeof(s1)=" << sizeof(s1) << " sizeof(s2)=" << sizeof(s2) << " sizeof(s3)=" << sizeof(s3) << endl; cout << "strlen(s1)=" << strlen(s1) << " strlen(s2)=" << strlen(s2) << " strlen(s3)=" << strlen(s3) << endl; return 0; }
s1为一个指针变量,指向数据区的字符串。在任意时刻,32位系统下指针类型为4字节,64位系统下指针类型为8字节。故sizeof(s1)=4,strlen(s1)为字符串长度=6。
s2会在字符串末尾加' ',故sizeof(s2)=7,strlen(s1)为字符串长度不包括' '=6。
s3不会加' ',故sizeof(s3)=6,strlen()是遇到第一个' '返回不包括' '的字符串长度值,所以s3中会一直往后找,具体由机器设定的默认开辟长度决定。
8. 静态变量在数据区,静态变量不会随函数运行结束而结束,初始值只赋一次,后面再次调用的时候是在上次的值上做相应改变,而不会再赋一次初值。
9. 【操作系统】
关于内存管理策略~页表。 内存是分成很多个页来管理的,1000x1000的数组相当大,要用很多页来存储,而数组存储是按照一行一行来存储数据的,同一行的在同一页,不同行的在不同页。 ABC,每存一个数,就得换一个页,不停的查询页表找地址,因而效率贼低。只有D寻址时间比较少,因为D的寻址是顺序的,顺序寻址消耗时间最少的。
10. 已知 int 占 4 个字节,bool 占 1 个字节。对于下面代码,value, condition 的结果为1024,0
#includeusing namespace std; int main(int argc, char** argv) { unsigned int value = 1024; bool condition = *((bool*)(&value)); if (condition) value += 1; condition = *((bool*)(&value)); if (condition) value += 1; condition = *((bool*)(&value)); }
将1024化成十六进制为:0x0400,题中&value取地址相当于取首地址(低地址)
若数据是采用大端存储方式,低地址对应的是数据的高位,即最左边的0,则condition = 0,不执行两个if语句,则value不变,还是1024。
若数据是采用小端存储方式,低地址对应的是数据的低位,即最右边的0,则condition = 0,不执行两个if语句,value值还是1024。
所谓的大端存储,即低地址存放高位数据,高地址存放低位数据。
对应的小端存储,即低地址存放低位数据,高地址存放高位数据。
无符号整型的取值范围为0~255。
11. #include命令的功能是在命令处插入一个文本文件。 预处理器发现#include后,就会寻找指令后面<>中的文件名,并把这个文件的内容包含到当前的文件中,被包含的文件中的文本将替换源代码文件中的#include指令。



