在C语言中调用C++做的动态链接库

1.什么是进制

进制是一种计数的方式,常用的有二进制、八进制、十进制、十六进制。任何数据在计算机内存中都是以二进制的形式存放的。

我对进制的个人理解,二进制数是以2为计算单元,满2进1位的数;八进制数是以8为计算单元,满8进1位的数。

对于任何一个数字,我们都可以用不同的进制来表示,比如,十进制数12,用二进制表示为1100,用八进制表示为14,用十六进制表示为0xC。

2.进制的转换规则

遵循满进制值进1位,个位数变为0的原理,下面我们以十进制数18为例,对1-18中每一个数值转换各种进制做一个详细说明

转二进制:

1小于2,无需进1位,1的二进制值是1

2为二进制值1后面一个数,由于1+1满2,需要进1位,个位数变为0,所以2的二进制值是10

3为二进制值10后面一个数,由于11的个位数1小于2,无需进1位,所以3的二进制值是11

4为二进制值11后面一个数,由于11的个位数1+1满2,需要进1位,而二进制值11的位数1+1又满2,所以位数加1,最终转换结果为100

转换思路:二进制值11+1 ->10+(1+1)(个位等于2,进1位,个位数变为0) ->(1+1)+0(位数满2,进1位) -> 100

以此类推,最终十进制数18的二进制转换结果是10010

转八进制:

1-7小于8,无需进1位,1-7的八进制由1-7表示

8为八进制值7后面一个数,由于7+1满8,需要进1位,个位数变为0,所以8的八进制值是10

以此类推,最终十进制数18的八进制转换结果是22

转十六进制

十六进制中,个位数1-15分别为1 2 3 4 5 6 7 8 9 a b c d e f (a=10....f=15)

16为十六进制值c后面1个数,由于c+1满16,需要进1位,个位数变为0,所以16的十六进制是10。

最终十进制数18的十六进制转换结果是12

详细结果如下图所示(C语言把数字前面加0x的数认为是十六进制数)

3.C语言中int类型进制的声明以及占位符

虽然以下3个变量的赋值方式不同,但实际赋值结果都是18

复制代码 代码如下:

//二进制类型数字加0b int number1 = 0b10010; //八进制类型数字加0 int number2 = 022; //十六进制类型数字加0x int number3 = 0x12;

八进制占位符:%o

十六进制占位符:%x

4.内存存储数据细节

我们知道,int类型数据占据4个字节,1个字节是8bit。并且任何数据在计算机内存中都是以二进制的形式存放的,所以内存需要用32个0或1来描述1个int类型数据。

由于18的二进制数是10010,我们将一个int类型变量赋值18,本质上是将这个变量的内存地址对应的32个bit位修改为:

0000 0000 0000 0000 0000 0000 0001 0010(未满31位,后面的数字用0填充:为什么是31而不是32呢,后面会介绍)

假设我们定义两个变量

?


1

2

3

4

5

6

//二进制类型数字加0b

  int number1 = 0b10010;

  //八进制类型数字加0

  int number2 = 022;

  //十六进制类型数字加0x

  int number3 = 0x12;

计算机会根据内存地址以由大到小的顺序进行分配内存空间,具体如下图所示:

5.进制的转换公式

二进制转十进制

0b1100 ->0*2的0次方 + 0*2的1次方 + 1*2的2次方 + 1*2的3次方 = 12

十进制转二进制

67 ->64+2+1 ->2的6次方+ 2的1次方 + 2的0次方 = 0b1000011

6.进制的其他知识

1.n位二进制能保存的整数范围公式:2的n次方-1

例如,3位的二进制数最大值为111,对应的十进制数字为7;5位的二进制数最大值为11111,对应的十进制数字为(2*2*2*2*2)-1 = 31。

2.负数的二进制保存规则是最左边的数字是1。例如,0000 0000 0000 0000 0000 0000 0001 0010 表示正整数,1111 1111 1111 1111 1111 1111 1110 1101表示负数

由此,我们就能推测出,int类型能保存的最大整数是2的(32-1)次方-1 =2147483647。为什么要用32-1,很简单,32个bit中,必须抽1个bit位用来描述这个数字是正数还是负数。

时间: 2024-11-02 21:39:27

在C语言中调用C++做的动态链接库的相关文章

如何在程序中调用Caffe做图像分类

Caffe是目前深度学习比较优秀好用的一个开源库,采样c++和CUDA实现,具有速度快,模型定义方便等优点.学习了几天过后,发现也有一个不方便的地方,就是在我的程序中调用Caffe做图像分类没有直接的接口.Caffe的数据层可以从数据库(支持leveldb.lmdb.hdf5).图片.和内存中读入.我们要在程序中使用,当然得从内存中读入.参见http://caffe.berkeleyvision.org/tutorial/layers.html#data-layers和MemoryDataLay

如何在C语言中调用Swift函数

在Apple官方的<Using Swift with Cocoa and Objectgive-C>一书中详细地介绍了如何在Objective-C中使用Swift的类以及如何在Swift中使用Objective-C中的类.在后半部分也介绍了如何在Swift中使用C函数,不过对于如何在C语言中使用Swift函数却只字未提.这里我就为大家分享一下如何在C语言中调用Swift函数. 我们首先要知道的是,所有Swift函数都属于闭包.其次,Swift函数的调用约定与Apple为Clang编译器贡献的B

C语言中调用Lua

C语言和Lua天生有两大隔阂: 一.C语言是静态数据类型,Lua是动态数据类型 二.C语言需要程序员管理内存,Lua自动管理内存 为了跨越世俗走到一起,肯定需要解决方案. 解决第一点看上去比较容易,C语言中有union. 可是第二点呢?万一C语言正引用着Lua的一个值,Lua自动释放了怎么办? 所以就有了一种比union更好的解决方案:栈. 这是一个虚拟的栈,是沟通两者的桥梁,两者的数据交换全都通过这个栈进行,这样只要不pop,Lua就不会自动释放,而什么时候pop由C语言说了算. 下面是一段喜

在Java语言中调用存储过程、存储函数、包头、包体

需要拷贝连接Oracle的jar包,路径如下图所示: 连接Oracle数据库的代码: package demo.utils; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class JDBCUtils { private static Stri

【转载】如何在C语言中调用shell命令

转载自:http://blog.csdn.net/chdhust/article/details/7951576 如何在C语言中调用shell命令 在linux操作系统中,很多shell命令使用起来非常简单,这些shell命令的程序实现已经被底层实现好.有时候需要在程序中调用shell命令,这样可以就不用在控制台上手动输入shell命令了,下面就以三个函数为例来讲解如何在C语言中调用shell命令. 1.system(执行shell 命令) 相关函数 fork,execve,waitpid,po

『Python CoolBook』C扩展库_其六_从C语言中调用Python代码

一.C语言运行pyfun的PyObject对象 思路是在C语言中提供实参,传给python函数: 获取py函数对象(PyObject),函数参数(C类型) 获取GIL(PyGILState_Ensure) 确保fun对象可调用 参数转换为python对应类型(Py_BuildValue) 调用python函数(PyObject_Call) 确定调用无异常 检查返回值 释放GIL(PyGILState_Release) 异常处理 #include "Python.h" /* Execut

如何在qmake项目中在QML语言中调用C++代码

在这篇文章中,我们将介绍如何在QML中使用C++代码.在以前的文章" 使用C++拓展QML 类型及Property binding!"中,我们可以可以通过C++ plugin的方法来拓展我们的QML功能.那个项目是CMake项目.对于qmake项目来说,我们也可以做同样的事.可以使用一个plugin,并在QML中调用它. 今天,我们将不使用plugin的方法,我们希望在qmake项目中直接调用C++代码.那么我们将如何做呢?这里注意qmake只对15.04及以上的ubuntu手机tar

在Julia语言中调用Python函数

在PyCall扩展包中,模仿Python的import语句,提供了一个可以导入Python模块的@pyimport宏.并且,为能在Julia中使用模块内的函数和常量做了封装,以及支持在Julia与Python间的自动类型转换. 同时,它还提供了对Python对象进行底层操作的设施.其中包括能与不透明的Python对象相对应的'PyObjec'类型,以及在Julia语言中对Python函数进行调用且做类型转换的pycall. 安装 在Julia中,只需要使用Pkg.add("PyCall"

解析如何在C语言中调用shell命令的实现方法【转】

本文转自:http://www.jb51.net/article/37404.htm 1.system(执行shell 命令)相关函数 fork,execve,waitpid,popen表头文件 #include<stdlib.h>定义函数 int system(const char * string);函数说明 system()会调用fork()产生子进程,由子进程来调用/bin/sh-cstring来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程.在调用syst