16mm突然变24mm?镜头的转换系数是什么意思

  很多购买了APS-C画幅的相机之后,都想要选配全画幅适用的镜头,比如佳能大部分的红圈头、尼康大部分的金圈头等等。这是因为很多用户认为自己以后一定会更换全画幅单反相机,因此不如从最开始就选配全画幅的镜头。其实对于这部分用户来说,这个做法并不正确。   说镜头之前,我们要说一下镜头焦段和相机画幅之间的关系。使用全画幅相机的朋友,镜头的焦段就是实际焦段;使用APS-C画幅和M4/3画幅的朋友,购买的镜头需要增加转换系数,才是实际的焦段。   一般APS-C画幅需要在镜头焦段乘以1.5或者1.6的转换系数才是实际拍摄焦段,M4/3则是乘以2。举个例子,比如使用18mm的镜头焦段,全画幅相机拍摄时就是18mm,APS-C画幅拍摄时就是18X1.5或者18X1.6等于27mm或者28.8mm才是实际拍摄焦段,而M4/3画幅则是36mm的实际拍摄焦段。所以选购镜头的时候,要转换系数。   再来就是如果使用APS-C画幅机身来选配全画幅镜头,那么就失去了广角焦段。我们举个例子,一般APS-C画幅的变焦镜头焦段都是从18mm端开始,比如18-55mm、18-105mm、18-135mm、18-200mm等等,即便是加上转换倍率,最广角的焦段也在27mm-28mm左右。全画幅的变焦镜头一般焦段都是从24mm起,比如24-70mm、24-105mm、24-120mm、28-300mm等等,如果接在APS-C画幅的机器上,算上转换倍率,广角焦段要从36mm-42mm起。   所以,如果使用APS-C画幅或者M4/3画幅的朋友,在选择镜头的时候要主要转换系数的问题,不要买了镜头以后发现焦段不是自己想要的。   本文属于原创文章,如若转载,请注明来源:16mm突然变24mm?镜头的转换系数是什么意思   很多购买了APS-C画幅的相机之后,都想要选配全画幅适用的镜头,比如佳能大部分的红圈头、尼康大部分的金圈头等等。这是因为很多用户认为自己以后一定会更换全画幅单反相机,因此不如从最开始就选配全画幅的镜头。其实对于这部分用户来说,这个做法并不正确…   第2页:佳能EOS M50套机(EF-M 15-45mm IS STM)详细

Read More

STM32 _I _0 _IO volatile const

显然,这三个宏定义都是用来替换成 volatile 和 const 的,所以我们先要了解 这两个关键字的作用: 简单的说,就是不让编译器进行优化,即每次读取或者修改值的时候,都必须重新从内存或者寄存器中读取或者修改。 3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义; 我认为这是区分C程序员和嵌入式系统程序员的最基本的问题。搞嵌入式的家伙们经常同硬件、中断、RTOS等等打交道,所有这些都要求用到 volatile变量。不懂得volatile的内容将会带来灾难。假设被面试者正确地回答了这是问题(嗯,怀疑是否会是这样),我将稍微深究一下,看一下这家伙是不是直正懂得volatile完全的重要性。 1)是的。一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。 2); 是的。尽管这并不很常见。一个例子是当一个中服务子程序修该一个指向一个buffer的指针时。 3) 这段代码有点变态。这段代码的目的是用来返指针*ptr指向值的平方,但是,由于*ptr指向一个volatile型参数,编译器将产生类似下面的代码: 由于*ptr的值可能被意想不到地该变,因此a和b可能是不同的。结果,这段代码可能返不是你所期望的平方值!正确的代码如下: 只读变量,即变量保存在只读静态存储区。编译时,如何尝试修改只读变量,则编译器提示出错,就能防止误修改。 两者都可以用来定义常量,但是const定义时,定义了常量的类型,所以更精确一些(其实const定义的是只读变量,而不是常量)。#define只是简单的文本替换,除了可以定义常量外,还可以用来定义一些简单的函数,有点类似内置函数。const和define定义的常量可以放在头文件里面。(小注:可以多次声明,但只能定义一次) 前面介绍了 volatile 和 const 的用法,不知道大家了解了没?了解了后,下面的讲解就更加容易了: __I :输入口。既然是输入,那么寄存器的值就随时会外部修改,那就不能进行优化,每次都要重新从寄存器中读取。也不能写,即只读,不然就不是输入而是输出了。 __O :输出口,也不能进行优化,不然你连续两次输出相同值,编译器认为没改变,就忽略了后面那一次输出,假如外部在两次输出中间修改了值,那就影响输出 一般宏定义都是大写,但因为这里的字母比较少,所以再添加下划线来区分。这样一般都可以避免命名冲突问题,因为很少人这样命名,这样命名的人肯定知道这些是有什么用的。 经常写大工程时,都会发现老是命名冲突,要不是全局变量冲突,要不就是宏定义冲突,所以我们要尽量避免这些问题,不然出问题了都不知道问题在哪里。

Read More