2018.8.5 复习笔记
1,"a" + "b" + 3 strcat
double d = 3
object obj = d
int i = (int)obj --异常
测试下装箱拆箱的时间,似乎很慢
拆装箱的本质??
看IL代码
"abbcd"是个引用?
s = "a" 有装箱吗?
s + "b" 有装箱吗?
where T :struct
where R :class
where V : ICompareable
where w : CAnimal
where x : class, new()
new必须是最后一个
IEnumerator实现枚举
显式实现
继承两个接口,中有同名方法
类型推断
hashtable dirtionary
yield方式的
IEnumerator
IEnumerable
IEnumerator<T>泛型实现 ?
------------------------------
索引器重载: 多维数组,string类型索引
可为空类型,object ?
什么叫类型安全?
委托接收实例的方法: dfun = obj.func
多播委托的加减顺序?
委托列表为空时可以继续减,但调用异常
线程t1调用t2.abort终止t2
t2在自己的线程中使用异常捕获,并输出t1传过来的信息
当前路径用 . 表示
GetType 可以用类名调用 ?
GetType("System.string") ?
---------------------
用UDP 做聊天室
一个电脑可能有多个IP
UDP:收数据需要绑定IP和端口,
只发送数据不需要绑定IP和端口
字符串转成字节数组后
字节数组如何转字符串
byte[] data
tcp.Receive(data)
这个数组应该多大?
底层数据包粘包后最大多大?
UDP的双端通讯可以使用TCP同样的思路
发送端自己不需要指定I自己的IP和端口
而只指定要连接的服务器的IP和端口
服务端接收连接后(TCP)
对UDP而言就是服务器REVICE后,会有一个IPENDPOINT返回,
这就是客户端的IP和端口,利用这个就可以与客户端通讯
c++线程
----------------------
unsigned int i = 0
int j = 1
i - 1 ?
-2147483648 < 2147483647 ? false
int i = -2147483648
i <2147483648 ? true
-2147483648 - 1 < 2147483648 ?
sum(int a[], unsigned len){
int i, sum = 0;
for(i=0; i<=len-1; i++)
sum += a[i];
return sum;
}
a[10] = {0};
sum(a, 0) ;
int x = 65536
int y = x * x;
x> y 等价于 -x < -y ?
x = -2147483648时不成立
main.c
int d= 100;
int x = 200;
int main(){
p1();
printf("d=%d, x]%d\n", d, x)
return 0;
}
p1.c
double d;
void p1(){
d = 1.0;
}
打印结果:
d=0, x=1072693248 ?
int copy_array(int* array, int coutn){
int i;
int *myarray = (int*)malloc(count*sizeof(int))
if(myarray == null)
return -1;
for(int i=0; i<count; i++)
myarray[i] = array[i]
}
int a = 0x80000000
int b = a/-1;
printf("%d\n", b);
int a = 0x80000000
int b = -1;
int c = a/b;
printf("%d\n", c);
除法错异常? 溢出
main(){
double a = 10;
printf("a = %d\n", a);
}
double func(int i){
volatile double d[1] = {3.14}
volatile long int a[2];
a[i] = 1073741824;
return d[0];
}
func(0)
func(1)
func(2)
func(3)
func(4)
二维数据间拷贝
行优先拷贝与列优先拷贝
double f(int x){
return 1.0/x;
}
void main(){
double a, b;
int i;
a = f(10);
b = f(10);
c = f(10); //试着去除这句看有什么不同
i = a == b;
printf("%d\n", i);
}
int main(int argc, char*argv[]){
int a= 10;
double *p=(double*)&a;
printf("%f\n", *p) //0.000000
printf("%f\n", (double(a)));//10.000000
return 0;
}
new()的多重重载使用
new 与 new()的区别
--------------------------
x86 包含 i386 ,i386 仅仅是 x86 的一部分。
x86 这里的 x 本来就是一个未知数性质的,他可以是 3、4、5、6、7 。
x86 是 Intel 建立起来的 CPU 架构。
他的 8086、8088、80286、80386、80486、Pentium 、Pentium Pro 、Pentium MMX ,Pentium 2 ,还有后面的 P3、P4 、PD 、Core 全系列,Xeon 的 x86 系列。以及 AMD 的 Intel 架构兼容全系列(楼主的 AMD 肯定也是啦,非 x86 架构如果楼主作为桌面计算机用上了,肯定不会来这里问这个问题了)。当然还有最近重新崛起的 VIA 的 C7 系列。
他们都是 x86 架构。
更多的 x86 代表的是 32 位的 Intel CPU 架构体系。
但其中分成很多代。i386 就是 80386 的那代 CPU 的标准,主要是支持 32 位的保护模式和实模式两种工作环境。这个功能很好很强大,一直沿用至今,而且系统对于这个功能是必须支持的。386 之后的 cpu 是完全兼容 i386 体系的。
i486 加入了新的一个功能,i586 (奔腾 1 代系列)又加入了新功能,i686 (奔腾 Pro 系列以后)又加入了新的功能体系。
i386 的软件可以运行在 i686 系统,但是 i686 的软件不能运行在之前的架构上。
旧 CPU 不能运行新软件主要是不能使用新的特性导致不能运行,但是旧的架构软件在新的架构上运行,仅仅是不能用新的功能体系,运行效率是没有减少的。
而且这个功能架构主要是 Linux 内核在使用。
所以楼主不要考虑 i386 和 x86 的关系。只要看到 i 什么 86 ,基本都能用。
如果有 i686 ,楼主的 CPU 只要不是 K6 系列,而是 Athlon 系列,最好选择 i686 ,但如果只有 i386 的,楼主注意安装后看看你的内核是不是 i686 体系的,如果是,性能不受影响。
题外:
i786 是一个隐藏的新体系,听说只能用在 P4 以后的 Intel CPU 上面。但是很多软件没有针对这个架构编写,所以除非自己基于 i786 编译,不然网上没有 i786 的软件。
这里还要说 x86_64 体系,这个是 AMD 提出并且最先使用的 x86 新的架构体系。他把 32 位的 i686 架构体系,扩展为 64 位。
但是因为变动很大的原因,64 位的系统软件要兼容 32 位的软件,需要在内核里打开支持,并且安装 32 位的兼容库才行。其实如果你有源代码,32位系统的源代码基本上可以直接在 64 位的系统上面编译成为 64 位架构可运行的软件(新的技术还是用不上)。
同样 64 位的 CPU 兼容上一代的 i686 架构,i686 CPU 不支持 x86_64 的软件。
如果楼主的 AMD CPU 是 Athlon 64 及其以后的 cpu 可以装 x86_64 的系统玩玩,不过注意,很多 32 位特有的软件,而且没有源代码的要么不能用,要么需要 32 位兼容库,Flash 的浏览器插件就是一个例子。64位的 Firefox 需要 32 位兼容库才能借助 Flash 插件显示 Flash 动画。Adobe 没有放出 64 位的插件,也没有提供源代码。
AMD 总是有新的点子,新的技术,却总是拼不过 Intel 的缓慢的技术革新。
------------------
10000x3 与 3x10000的效率差别?
UI适应分辨率
https://blog.csdn.net/wkhabc/article/details/52527202
智能指针 不能用于数组??? 智能指针的使用及reset 注意事项?? p1 = p2 p1 = new(p2) p1.reset(p2) p1.reset() { A*p = new A() shared_ptr<A> ptr(p); shared_ptr<A> ptr2; ptr2.reset(p); } int ary[] = {1, 2, 3, 4, 5} for(int& e:ary) e*=10; struct A{int n; A(int i):n(i){}} vector<A> st(ary, ary +5)//类型转换构造函数