unsigned

C语言无符号和有符号的区别

匿名 (未验证) 提交于 2019-12-03 00:14:01
C语言定义一个int类型时,默认是有符号数,关键字signed常省略,如: int a; signed int a; signed a; 这三句是一样的定义 定义无符号数时,必须加关键字unsigned,如: unsigned int a ; unsigned a; 无符号关键字unsigned,只适用于int short long char四种变量,浮点型数据只有有符号类型。 那么为什么float会没有无符号呢?C语言中,整型是采用二进制表示的,而浮点数却是按照整数部分,小数部分,指数部分存放的。 运算也是分开来运算的。这样的做法,使得浮点数可以表示很大的范围,所以unsigned无法作用于float,定义无符号的浮点型会出错。不够的话,可以用double,双精度。 以32位机为例,int 分为无符号 unsigned 和有符号 signed 两种类型,默认为signed。二者的区别就是无符号类型能保存2倍于有符号类型的数据。 32位下,signed int 的表示范围为:-2147483648 ~ 2147483647 (最高位做符号位)。 unsigned int 的表示范围为:0 ~ 4294967295 (不保留符号位)。我们都知道,两个不同的数据类型在进行混合使用时,会自动进行类型转换。 其转换原则就是:向着精度更高、长度更长的方向转换。也就是我们平常见到的 char

GDAL c++ 遥感影像16位转8位

匿名 (未验证) 提交于 2019-12-03 00:11:01
typedef unsigned __int16 uint16_t; typedef unsigned unsigned char uint8_t; int stretch_percent_16to8(const char *inFilename, const char *dstFilename) { GDALAllRegister(); //为了支持中文路径 CPLSetConfigOption("GDAL_FILENAME_IS_UTF8", "NO"); int src_height = 0; int src_width = 0; GDALDataset *poIn = (GDALDataset *)GDALOpen(inFilename, GA_ReadOnly); //打开影像 //获取影像大小 src_width = poIn->GetRasterXSize(); src_height = poIn->GetRasterYSize(); //获取影像波段数 int InBands = poIn->GetRasterCount(); //获取影像格式 GDALDataType eDataType = poIn->GetRasterBand(1)->GetRasterDataType(); //定义存储影像的空间参考数组 double adfInGeoTransform[6

MurmurHash PK CityHash

匿名 (未验证) 提交于 2019-12-03 00:05:01
1. 概述 murmurhash是 Austin Appleby于2008年创立的一种 非加密hash算法 ,适用于基于hash进行查找的场景。murmurhash最新版本是MurMurHash3,支持 32位、64位及128位值 的产生。 murmurhash标准使用c++实现,但是也有其他主流语言的支持版本,包括:perl、c#、ruby、python、java等。murmurhash在多个开源项目中得到应用,包括libstdc、libmemcached 、nginx、hadoop等。 CityHash是Google发布的字符串散列算法,和murmurhash一样,属于非加密型hash算法。CityHash算法的开发是受到了 MurmurHash的启发。其主要优点是大部分步骤包含了至少两步独立的数学运算。现代 CPU 通常能从这种代码获得最佳性能。 CityHash 也有其缺点:代码较同类流行算法复杂。 Google 希望为速度而不是为了简单而优化,因此没有照顾较短输入的特例 。 目前CityHash支持 64、128、256 λ 2.使用: 1)Murmurhash直接添加源码: //----------------------------------------------------------------------------- // MurmurHash2, 64

size_t――为什么支持size_t,何时使用size_t?

匿名 (未验证) 提交于 2019-12-02 23:56:01
许多C/C++文件中都会出现类型 size_t ,比如在bitcoin源码中,有这样的一个函数: size_t strnlen( const char *start, size_t max_len) { const char *end = (const char *)memchr(start, '\0', max_len); //memchr函数从start开始寻找第一个出现字符'\0'的位置并返回 return end ? (size_t)(end - start) : max_len; //const char的长度吧,为啥要这样写,为什么要单独写一个文件啊,NOTE } 该函数完成了返回 const char* 类型 start 代表的串的长度,返回值被设置为 size_t 类型。这是 size_t 经常被使用的一个场景“ 数组可能的长度 。 另一个使用场景就是函数 memcpy (其实本质上是一样的,都是表示 内存中 数据的多少)。 memcpy 的原型 void* memcpy(void*to,const void*from,size_t n) 。需要复制的字节数被设置为 size_t 类型,这是 数据块的大小 。 于是,会给人一种感觉,这种工作 int 也可以完成,如果说需要排除负数, unsigned int 也可以完成。为什么要多此一举引入 size_t 呢? 另外

Qt 交叉编译经典错误――头文件包含

匿名 (未验证) 提交于 2019-12-02 23:55:01
分析: 包含我在某个C头文件中包含了C++ #ifdef __cplusplus //bsp_GPIO.h .c 被 cpp文件引用,需要如此添加 extern "C" { #endif //----------本文件需要引出的函数----------// int GPIO_OutEnable ( int fd , unsigned int dwEnBits ); int GPIO_OutDisable ( int fd , unsigned int dwDisBits ); int GPIO_OpenDrainEnable ( int fd , unsigned int dwODBits ); int GPIO_OutSet ( int fd , unsigned int dwSetBits ); int GPIO_OutClear ( int fd , unsigned int dwClearBits ); int GPIO_PinState ( int fd , unsigned int * pPinState ); int GPIO_IrqEnable ( int fd , unsigned int dwEnBits ); #ifdef __cplusplus } #endif 注:C文件不可以引用C++文件,在现实当中,只能够在C++里面引用c文件

C++11学习笔记(1)

匿名 (未验证) 提交于 2019-12-02 23:52:01
注:本人所有学习笔记多来自各种书籍原著,C++11学习笔记根据《C++Primer (第五版)》整理,仅供个人复习使用。 #include<iostream> int main() { int sum = 0, value = 0; //读取数据直到遇到文件尾 while(std::cin >> value) sum += value; std::cout<<"Sum is:"<<sum<<std::endl; return 0; } 我们可以将istream对象作为判断条件来判断输入是否结束。当使用一个istream对象作为条件时,其效果时检查流的状态。如果流是有效的,即流未遇到错误(遇到文件结束符或遇到无效输入),那么检测成功。而处于无效状态的istream对象会使条件变为假。 PS:当从键盘向程序输入数据时,对于如何指出文件结束,不同的操作系统有不同的约定。在Windows系统中,输入文件结束符的方法时Ctrl+Z,然后按Enter或Return键。在Unix系统中,包括Mac OS X系统中,文件结束符输入是用Ctrl+D。 2.使用文件重定向 测试程序可以使用操作系统提供的文件重定向功能,这种机制允许我们将标准输入和标准输出与命名文件关联,格式如下: $ 可执行文件名<输入文件名> 输出文件名 PS:Windows系统需要带文件名后缀,Linux不需要。 3.C+

.NET 互操作

匿名 (未验证) 提交于 2019-12-02 23:47:01
.NET 互操作   首先推荐一本书 《精通.NET 互操作》 ,这本书是目前中文资料里讲 互操作最详尽的书了。   做系统集成项目的同学应该都和设备打过交道(如视频设备:海康、大华等),在大多数情况下这些设备厂商会给系统集成厂商开发协议(dll 类库、 函数定义的头文件、测试程序、调用流程),这些协议的dll 大都用C++开发的,那么我们用C#集成,就得用 P/Invoke 技术(.NET 互操作的一种) 一、P/Invoke 简单例子   P/Invoke 说白了,就是你调用协议dll 的函数,传入正确的参数(注意C++与C#的数据类型转换)   例子: 1 using System . Runtime . InteropServices ; 2 3 class App 4 { 5 [ DllImport ( "msvcrt.dll" )] 6 static extern int puts ( string msg ); 7 8 [ DllImport ( "msvcrt.dll" )] 9 static extern int _flushall (); 10 11 static void Main () 12 { 13 puts ( "Hello World" ); 14 _flushall (); 15 CreateMsgWindow (); 16 } 17 18 19 [

Times33 DJB Hash 算法

匿名 (未验证) 提交于 2019-12-02 23:46:01
33 算法。 作用:将字符串映射成一个整数 用法:顾名思义,每次用ANSIC值乘 33,做法类似进制。 hash(i) = hash(i-1) * 33 + str[i] 下面是优化的代码: unsigned int DJBHash(const char* str, unsigned int length) { unsigned int hash = 5381; unsigned int i = 0; for (i = 0; i < length; ++str, ++i) { hash = ((hash << 5) + hash) + (*str); } return hash; } 参考文献: http://www.partow.net/programming/hashfunctions/#top http://guyot.blog.163.com/blog/static/120574021201011374439716/

基于51单片机的点阵贪吃蛇

匿名 (未验证) 提交于 2019-12-02 23:43:01
程序如下: #include <reg52.h> #include <intrins.h> #include <stdlib.h> #define SNAKE 20 unsigned char x[SNAKE]; //存放蛇的X轴坐标 unsigned char y[SNAKE]; //存放蛇的Y轴坐标 unsigned char point_x; //存放果实的X轴坐标 unsigned char point_y; //存放果实的Y轴坐标 /* //点阵模块接口定义 sbit LEDARRAY_LAT = P3^6;//储存寄存器是时钟 sbit LEDARRAY_CLK = P3^5;//移位寄存器时钟输入端 sbit LEDARRAY_DI = P3^4;//串行数据输入端 sbit up = P3^0; sbit down = P3^1; sbit left = P3^2; sbit right = P3^3; unsigned char num[8][8]={ 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0 };//定义8*8数组作为清屏数据(有点走弯路

Android Native Hook技术(一)

匿名 (未验证) 提交于 2019-12-02 22:56:40
原理分析 动态库注入 inline hook 源码目录中的example则是一个使用ADBI进行hook epoll_wait的示例。 hijack hijack实现动态库注入功能,通过在目标进程插入dlopen()调用序列,加载指定so文件。要实现这个功能,主要做两件事情: 获得目标进程中dlopen()地址 在目标进程的栈空间上构造一处dlopen()调用 下面分别解决这两个问题 1. 获得目标进程中dlopen()地址 在ADBI中,通过下面代码来获得目标进程中dlopen()函数地址: void *ldl = dlopen("libdl.so", RTLD_LAZY); if (ldl) { dlopenaddr = (unsigned long)dlsym(ldl, "dlopen"); dlclose(ldl); } unsigned long int lkaddr; unsigned long int lkaddr2; find_linker(getpid(), &lkaddr); find_linker(pid, &lkaddr2); dlopenaddr = lkaddr2 + (dlopenaddr - lkaddr); 其中find_linker()函数功能是获取指定进程中linker的地址。 linker是Android提供的动态链接器