易截截图软件、单文件、免安装、纯绿色、仅160KB

c,c++内存运行时深入研究

(一)整数符号的陷阱 
(二)浮点数的本质 
(三)堆栈的内存管理结构 
(四)符号解析 
(五)对齐和总线错误 
(六)函数指针 
(七)虚函数的实现机理 
(八)引用的实现机理 
(九)虚拟继承对象的内存结构 
(十)混合编程时的初始化顺序 
(十一)数组和指针的异同 
(十二)const限定的传递性 
(十三)数据类型的限定性检查 
(十四)使用STL时的类型限制 
(十五)迭代器自身的类型 
(十六)运行时的类型信息 
(十七)new/delete重载 
(十八)如何拷贝一个文件 
(一)整数符号的陷阱 
        x
#include
int main(void){ 
int x=1; 
unsigned int y=2; 
int b=x
int b2=(x-y<0); 
printf("%d,%d ",b,b2); 
return 0; 

它输出什么呢? 
1,0 
    令人震惊,不是吗,x
(1)x
(2)x-y的结果计算的时候,返回一个0xfffffffe,它被当成无符号数字理解并和0比较,显然<0不成立,返回0。 
总结一下,整数的运算,加减乘的时候,根本不管是否声明为是否有符号,在2进制cpu上面的计算是相同的,但是比较的时候(<,>,==)会根据类型,调用不同的比较指令,也就是以不同的方式来理解这个2进制结果。当signed和unsigned混用的时候,全部自动提升为无符号整数。 
#include
int main(void){ 
int i=-2; 
  unsigned j=1; 
if(j+i>1) //提升为两个uint相加
    printf("sum=%d ",j+i);//打印的结果根据%d制定,j+i的内存值永远不变。
return 0; 

输出 
> ./a.out
sum=-1 
再举一个例子 
#include
int main(void){ 
int i=-4; 
unsigned int j=1; 
int ii=i+j; 
unsigned int jj=i+j; 
printf("%d,%ud ",ii,jj); 
if(ii>1){printf("100000");} 
if(jj>1){printf("100001");} 
return 0; 

用gcc -S得到汇编,会发现if(ii>1)和if(jj>1)对应两个不同的跳转指令jle和jbe。 
总结: int和unit在做比较操作和除法的时候不同,其他情况相同。 
返回页首 
(二)浮点数的本质 
&n


相关文档:

自动化测试中Python与C/C++的混合使用


背景
项目的
自动化测试中已经使用了基于Python
脚本的框架,自动化过程中最关键的问题就是如何实现桩模块。运用
Python
强大的功能,实现任何桩模块都是可能的,但是是否必须完全使用
Python
实现模块逻辑,成本是一个决定性因素。在桩模块逻辑简单的情况下,使用
Python
模拟模块逻辑不但使自动化测试的结构清 ......

extern及extern “C”用法

extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字创意产品网 .
它告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。
1。对于extern变量来说,仅仅是一个变量的声明,其并不是在定义分配内存空间。如果该变量定义多次,会有连接错误
2。通常,在模块的头文件中对本模块提供给其它模块 ......

C/C++ static和可重入概念

static
C++中的static
  C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。
  一、面向过程设计中的static
  1、静态全局变量
  在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变 ......

C: 面向对象(2)

演示如何用C实现继承,重载之类的玩艺儿。VC++6.0编译通过。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifndef class
        #define class struct
#endif
#ifndef private
        #define privat ......

在windows平台上搭建linux C 开发环境

注:请允许我转载您的佳作
在windows上开发能够在linux上编译的C代码,我查了查有2个软件可以实现,一个是Cygwin,一个是mingw。其中cygwin是一个windows上linux环境的模拟工具,他提供了很多linux工具的windows实现版本,例如vi,emacs等等,当然也包括GCC。使用mingw的好处就是编译过的程序直接就可以跑了,而cygwin则需 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号