精华内容
下载资源
问答
  • 不过因为声音档案看不见摸不到的东西, 如果你不是经常在做音乐的人,可能会很难体会。 所以我要先用图片档案的解析度来做类比。这样子你才会比较好懂。 关于图片答案解析度的名字, 大家最熟悉的大概就是...

    今天我们要来聊的是声音档案的解析度。 不过因为声音档案是一个看不见摸不到的东西, 如果你不是经常在做音乐的人,

    可能会很难体会。 所以我要先用图片档案的解析度来做类比。这样子你才会比较好懂。 关于图片答案解析度的名字, 大家最熟悉的大概就是像素这两个字。所谓的像素就是组成画面的最小的元素, 所以你在电脑上可以看到的图片或是影片都是有像这样子的一个一个小方格组成的。 这边的每一个小方格,我们就叫它是一个像素, 电脑储存图片的方式就是把每个像素的颜色都转换成一个数字写在文件里面。

    有了每个画素的颜色。 资讯, 电脑就可以在屏幕上面出现一张图片,一张图片文件含有的像素数越多, 基本上就表示它含有越多细节, 也就是说你可以把它放很大的,会不会变成一格一格的六十好像是这张照片

    fa44f5099ad56d93eb3e9498b826c5b1.png

    它是我的单反相机拍的, 他从左到右有5184个像素,从上到下有3456像素, 所以整张图片就是5184x3456差不多乐器版本我像素, 所以我可以把它放到很大很大清楚的看到她眼睛的细节

    0951214b9c1311e6f3ae84abfcb6323e.png

    那是我这张图片被上传到朋友圈的话,因此, 为了节省空间, 会把转档成大约只有一百万画素的格式,那你放大的时候就很容易看到一格一格的很多细节都不见得比较下差很多吧。

    bd76e35f122769d2c969ce231a14f3d1.png

    除了画素的多少之外, 很多人不知道的事情是用来叙述每个画素颜色的数字范围也是很重要的。

    我刚才不是说电脑储存图片的方式就是把每一个画素的颜色都转换成一个数字, 写在文件里面吗? 在2019年,我们所用的图片多半都是采用24位数的色彩格式。 就是说 在每一个像素电脑是用一个从零一直到二的24次方减一这个范围当中的一个数字来代表那个画树的颜色。再换句话说, 也就是我们总共可以有二的24次方种, 也就是16777216种不同的颜色。

    840c3bc7e6c44d07df0239e447be2900.png

    但你有那么多种颜色可以用。 当然可以表达很细微的颜色差距。 那如果我们来把描述色彩的为位数数降低试试看,

    若降到8位格式, 我们就只剩下2的8次方, 一共256种颜色可以使用了那个图片就会变成像是这样子。

    7d0dbe9162a4c03ebcaa10cee63ae747.png

    你可能觉得250多种颜色还是很多的吧, 对不对这个图片看起来好像也是还好啊, 但是我把颜色说更降低了。

    7位原格式的话就剩下128种音色。

    bdb18e5923b5a8a3122c8eaf26a5e1c1.png

    接下来是6位原格式就剩下64种颜色

    473d7db9dfbef1f11d5e15bef7c86b81.png

    这是5位原格式,也就是只有二的五次方32种可能的颜色到这边

    1ea1e811d6c959ed18d3272aa5c5e0a4.png

    你应该会发现渐渐有一块一块的色块出现的。 这是因为在只能有32种颜色的情况下,已经 没有办法表达颜色的细微差距,所以所有的颜色都要被四舍五入进32种颜色之中的其中一种。 那我们继续调低色彩数试试看。

    这个是四位原格式整张图片只有16种颜色

    78ddee5b6addee49ffc52a19fe173133.png

    三位原格式整张图片只有八种颜色,

    447b5d1f80219cd511ecf136cce524b0.png

    要是二位原格式只能图片只有四种颜色。

    95745110c9cc5dd011e16d502424ca51.png

    最后是一位原格式, 也就是整张图片, 只能有两种颜色。

    75516813e0461e8aa43a5564ff494187.png

    最后整理下在非压缩的图片档案格式里面影响画质的因素主要有两种, 一个是像素的数量, 影响形状的解析度。

    另外一个是色彩的位数, 它会影响色彩的解析度。 说了这么多图片档案的事情。

    现在我终于要来到声音文件档案了。 在非压缩的声音档案当中, 影响音质的因素有两个,一个是取样频率。 另外一个是位数深度。 接下来我要跟你解释这两件事情的影响声音档案里面的取样就像是图片文件里面的像素一样。如果在录影转里面把声波放大。 你就可以看到在电脑里面升档也是跟图片答案一样, 用一个一个小点点储存起来的电脑。

    7b1a07e232d21dfe51f46aca6e878037.png

    在声音档案里面, 就是用一个数字代表每个取样点的高度。 他知道的每个点点的高度之后,电脑就可以还原整段声波,那所谓的取样频率, 就是再说一秒钟电脑绘画几个点点来记录声波。再说, 理论上画越多个点, 就越可以记录瞬间的声波变化。

    但是跟图片答案不同的是, 人可以把图片放大来看, 但是你没有办法把升档按放大来听,以更多的取样点三理论上可以进入更高频率的细节。 但是人听不到, 所以完全没有用武之地。

    根据所有的尼奎斯特定理, 要保留某个频率的声波, 你必须用两倍以上的取样频率才能把它记录下来。那一般认为人类的耳朵可以听到的最高频率是2万Hz, 但要记住所有人类听得见的声音, 频率,范围, 你只需要用两倍, 也就是每秒四万个以上的取样点就可以了。

    在2019年, 在油管上面听到的大部分影片的声音都是每秒四万八千个取样点(48kHz)的取样频率录制的。 而一般音乐专辑或者CD唱片国内视频网站的取样频率还会稍微再低一点点。常见的规格是每秒四万四千一百个(44.1KHz)取样点, 不过这两种格式都已经比四万还要高, 所以都可以完全进入到人类听得见的频率。

    影响音质的另外一个因素是位数深度, 我们刚才不是说电脑在声音档案里面会用一个数字就代表每个取样点的高度嘛。 在一般入门等级的USB麦克风,它里面那个把声波转换成数字信号的那个转换器, 多半都是16位数的又叫做16 bit ADC。也就是说, 它可以让每个取样点有二的16次方, 一共65536种可能的高度。

    54dd3a21d45cf2d37a3769510b56930c.png

    那时候, 你实际上的那个声波没有刚好落在那个转换器可以记录的那六万多种高度上面的话怎么办呢? 那就想前面图片档案的时候要四舍五入了。

    你看种假设我有一个声波是这个样子,然后我要在这五个时间点坐骑一样。 但是我的取向点并不是可以挂在任何一个地方。

    5cd450f3f5d18e323f47acca59526ab9.png

    取样点是有刻度的, 以16位的录音来说, 要画到哪六万多个刻度当中的其中一个,所以说, 你的声波在取样的那个时间点当时没有正好落在刻度上的话, 我们就只好四舍五入取最接近的那个取样点来记录。那你看我们记录的声波不就跟原来的声波有误差了, 这样子的误差就叫做量化误差, (Quadratuer Error)

    c648a0a380ed0ba5bb9b087f64ed3505.png

    量化误差在实际上面的表现就是会产生杂音, 那你的转换器每多一个位数大约就可以减少六分贝的量化误差的杂音, 16位数的录音的量化误差杂音,大约可以比最大讯号小声96分贝2,而4位数录音的量化误差造成的噪音会比最大型号小升144分贝。

    当你用16位模式录音的时候, 因为麦克风里面的那个转换器把声波转成档案时量化误差产生的杂音比较大,所以你会想要在录音的时候就把音量开大一点点来尽量改掉那些杂音。 但是录音的时候音量太大的话又会有音量爆掉的风险。如果你用24位模式录音的时候,你可以把麦克风的音量关很小都没有关系。 因为就算你再录完音之后, 再把文件整个调大个二十分贝到三十分贝你都还是完全听不到因为量化误差而产生的杂音。 当然我还是要提醒你以上说的杂音都是你的麦克风,把声音转换成数位档案的时候, 因为数字计算的四舍五入而产生的杂音, 而不是说你录音的时候环境的杂音。那个环境的杂音是不管你用几位的模式录音都没有办法去除的。

    展开全文
  • 内存和操作系统位数之间的关系是什么? 这是最近产生的问题,找一下答案 链接: link. 主要参考这篇文章,但是还是不懂电脑处理器的频率,内存,还有操作系统位数之间的关系 ,先搁置在这里,看看后面能不能找到资料...

    内存和操作系统位数之间的关系是什么?
    这是最近产生的问题,找一下答案

    链接: link.

    主要参考这篇文章,但是还是不懂电脑处理器的频率,内存,还有操作系统位数之间的关系 ,先搁置在这里,看看后面能不能找到资料解决一下这个问题

    展开全文
  • 下面使用了string库函数的代码,也可以不用标准库函数,腾讯的一道笔试题: 其中求字符串的长度,可以...寻找“,”的位置,也可以不用find_last_not_of,而用循环匹配,来确定什么时候输出"." 其中剔除'.',也可

    下面是使用了string库函数的代码,也可以不用标准库函数,是腾讯的一道笔试题:

    其中求字符串的长度,可以使用strlen,不用length()函数,

    寻找“,”的位置,也可以不用find_last_not_of,而用循环匹配,来确定什么时候输出"."

    其中剔除'.',也可以使用移位操作来实现

    #include <iostream> 
    #include <string> 
    using namespace std; 
    string mul(string, string); 
    int main() 
    { 
    string sMul,sMul1,sRes; 
    //以上依次为,乘数,当前结果 
    int iDot,iLen,iLen1,iTmp,iTmp1,i;
    int iExp;
    //以上依次分别为指数,小数点在结果中的位置,被处理过的乘数的当前长度,临时变量,循环变量 
    while(cin>>sMul>>sMul1)
    { 
    iLen = sMul.length(); 
    
    iTmp = sMul.find_last_not_of("0"); //从尾端查找第一个非0数的位置 
    if (iTmp < iLen-1) //如果这个位置不是乘数的末位(换言之这个乘数小数部分末尾有0) 
    { 
      sMul.erase(iTmp+1,iLen-iTmp); //剔除乘数小数部分末尾的0 
      iLen = sMul.length(); //更新iLen的值 
    } 
    
    iLen1=sMul1.length();
    iTmp1=sMul1.find_last_not_of("0");
    if(iTmp1<iLen-1)
    {
    	sMul1.erase(iTmp1+1,iLen1-iTmp1);
    	iLen1=sMul1.length();
    }
    iTmp=sMul.find_first_of(".");
    iTmp1=sMul1.find_first_of(".");
    iDot=iTmp+iTmp1-1;
    sMul.erase(iTmp,1); //剔除被乘数的"." 
    sMul1.erase(iTmp1,1);
    
    while (sMul[0]=='0') 
    sMul.erase(0,1); //这个循环剔除乘数前面的0 
    sRes=sMul; 
    sRes=mul(sMul,sMul1);
    
    while (sRes.length()<iDot) 
    sRes='0'+sRes; //这个循环用来为结果补0,以添加小数点 
    if (iDot!=0) 
    sRes.insert(iDot,".");
    cout << sRes << endl; 
    } 
    return 0; 
    } 
    
    string mul(string a,string b) 
    { 
    string sRes=""; //先置结果为空 
    int la,lb,i,j,temp1,temp2; 
    //以上依次为乘数a/b的长度,两个循环变量,两个中间变量 
    
    la=a.length();lb=b.length(); 
    for (i=0;i<la+lb;i++) 
    sRes.insert(0,"0"); //根据结果的最大长度置0 
    
    for (i=lb-1;i>=0;i--) 
    { 
    temp1=0; 
    for (j=la-1;j>=0;j--) 
    { 
    temp1+=(b[i]-48)*(a[j]-48); 
    temp2=sRes[i+j+1]-48+temp1%10; 
    sRes[i+j+1]=temp2%10+48; 
    temp1=temp1/10+temp2/10; 
    } 
    sRes[i]=temp1+48; 
    } 
    //以上过程就是模拟计算 
    while (sRes[0]=='0') 
    sRes.erase(0,1); //循环剔除结果前面的0 
    return sRes; 
    } 
    展开全文
  • 解题思路:将两组小数用数组存储,计算机两组小数点位数的总和,将小数点剔除,将小数点后面位数向前移动一。即开始求两大整数的乘积。用递归的思路输出,得到的乘积,同时通过计算的小数点的位数,来判定什么...
    解题思路:将两组小数用数组存储,计算机两组小数点位数的总和,将小数点剔除,将小数点后面的位数向前移动一位。即开始求两个大整数的乘积。用递归的思路输出,得到的乘积,同时通过计算的小数点的位数,来判定什么时候输出小数点。

      求两个大整数的乘积的思路:用结点来存储乘积的每一位,可以是数值不受限制。


    关键函数:istream&getline(char *pch,int nCount,char delime='\n')
    extern char * strchr(char *str,char character)
    extern char * strrev(char *s)

      
      #include<iostream>     
      using   namespace   std;     
      #define   MAX   10000     
      struct   Node{     
            int   data;     
            Node   *next;     
      };     
      void   output(Node   *head,int   pos)     
      {     
            if(!head->next&&!head->data)return;     
            output(head->next,pos-1);     
            cout<<head->data;   
            if(!pos)cout<<".";   
      }     
      void   Mul(char   *a,char   *b,int   pos)                     
      {     
            char   *ap=a,*bp=b;     
            Node   *head=0;     
            head=new   Node;head->data=0,head->next=0;       //头     
            Node   *p,*q=head,*p1;     
            int   temp=0,temp1,bbit;     
            while(*bp)                                 //若乘数不为空   ,继续.     
            {     
                    p=q->next;p1=q;     
                    bbit=*bp-48;                     //把当前位转为整型     
                    while(*ap||temp)                         //若被乘数不空,继续     
                    {     
                            if(!p)                         //若要操作的结点为空,申请之     
                            {     
                                    p=new   Node;     
                                    p->data=0;     
                                    p->next=0;     
                                    p1->next=p;     
                            }     
                            if(*ap==0)temp1=temp;     
                            else   {   temp1=(p1->data)+(*ap-48)*bbit+temp;ap++;   }     
                            p1->data=temp1%10;         //留当前位     
                            temp=temp1/10;         //进位以int的形式留下.     
                            p1=p;p=p->next;                                   //被乘数到下一位     
                    }     
                    ap=a;bp++;q=q->next;                                 //q进下一位     
            }     
            p=head;     
            output(p,pos);                                       //显示     
            cout<<endl;     
            while(head)                                   //释放空间     
            {     
                            p=head->next;     
                            delete   head;     
                            head=p;     
            }     
      }     
      int   main()     
      {     
            cout<<"请输入两个数"<<endl;     
            char   test1[MAX],test2[MAX],*p;     
            int   pos=0;   
            cin.getline(test1,MAX,'\n');     
            cin.getline(test2,MAX,'\n');   
            if(p=strchr(test1,'.'))   
            {   
                    pos+=strlen(test1)-(p-test1)-1;     
                    do   
                    {   
                            p++;   
                            *(p-1)=*p;   
                    }while(*p);   
            }                   
            if(p=strchr(test2,'.'))   
            {   
                    pos+=strlen(test2)-(p-test2)-1;   
                    do   
                    {   
                            p++;   
                            *(p-1)=*p;   
                    }while(*p);   
            }           
            Mul(strrev(test1),strrev(test2),pos);     
            system("PAUSE");     
            return   0;     
      }     
    展开全文
  • * 比如sql: * SELECT round(1764/25000,4) * 结果会得到 0.0706 。...* 但实际上结果会得到7.0600,后面会多出两0,整个运算jie'guo的小数位数都受到了round的影响,请问这什么呢? * *
  • 如果要将一特定的整型数a的bit15清0,其他不变 <code class="language-cpp">a&=~(...简单点讲就是 我想知道不同长度进行运算如何进行的 为什么上面两种情况截然不同</p>
  • 我在oracle中写了一求数据集的sql语句,得到的数据都保留三小数,但是通过程序得到的DataTable,所有数据多了一。这什么呀?如:本来在数据库里取出来0.067,但是从程序里出来后就变成了0.0670,后面会...
  • 首先,float单精度浮点型,计算机会分配4字节,32来进行存储,而double float双精度浮点型,计算机则会分配8字节,即64来进行小数的存储,这是后面进行详细解释的必备知识。 其次,计算机在存储浮点型数据时,...
  • 最近做比特币相关的行情展示,涉及到这大量的double类型数据的处理。为了显示整齐好看,同时针对位数什么...imageimage误区:一开始小萌新以为控制精度(小数点后几),然后进度控制完后如果位数不足就末尾补0....
  • 求n的阶乘的位数

    2020-07-28 10:47:12
    O型血的人大多数行动派,郑微更将这特征发挥到了极致。次日上课,阮阮前所未有地发现她在课堂上奋笔疾书,大为惊讶,便凑过去问了一声,“在写什么呀?”郑微大大方方地向阮阮展示了她一早上的智慧结晶,阮阮...
  • 【产品】什么是密码及其用途

    千次阅读 2019-07-09 10:10:29
    什么是密码技术? 虚密码就是在正确的密码前面和后面加上任意位数的数字,一般最大支持 32 密码,只要中间有连续正确的密码就可开门,这样就能一定程度上有效防止密码泄漏。 只要不改变真实密码顺序,...
  • 位域指信息在存储时,并不需要...所谓“位域”把一字节中的二进位划分为几 不同的区域, 并说明每区域的位数。每域有一域名,允许在程序中按域名进行操作。 这样就可以把几不同的对象用一字节的二...
  • 如:struct student位域指信息在存储时, 而只需占几或一二进制,并不需要占用一完整的字节。 这样就可以把几不同的对象用一字节的二进制位域来表示。C语言又提供了一种数据结构,为了节约存储空间,...
  • IP后面带/30 /29 /27等是什么意思?

    千次阅读 2019-09-27 21:29:43
    那个代表你网络的位数,也就是能判断子网掩码。比如30 说明就是11111111.11111111.11111111.11111100 (301,20)然后转换成十进制就是255.255.255.252说明子网掩码就是255.255.255.252 转载于:...
  • 如图所示,本来是一长度为4的字符数组,用%c手动一输出是正常显示,但是用%s直接输出这字符数组就出现输出位数并不是4,这是什么原因呢?是这字符数组的后面没有带上0吗?遇到这种情况有什么简便的方法...
  • and-LeafDiagrams)又称“枝叶图”,由统计学家约翰托奇设计,它的思路将数组中的数按位数进行比较,将数的大小基本不变或变化不大的作为一主干(茎),将变化大的的数作为分枝(叶),列在主干的后面,这样就...
  • 最近做比特币相关的行情展示,涉及到这大量的double类型数据的处理。为了显示整齐好看,同时针对位数什么...imageimage误区:一开始小萌新以为控制精度(小数点后几),然后进度控制完后如果位数不足就末尾补0....
  • 最近做比特币相关的行情展示,涉及到这大量的double类型数据的处理。为了显示整齐好看,同时针对...误区:一开始小萌新以为控制精度(小数点后几),然后进度控制完后如果位数不足就末尾补0. 然后就发现如果...
  • 最近做比特币相关的行情展示,涉及到这大量的double类型数据的处理。为了显示整齐好看,同时针对位数什么的... 误区:一开始小萌新以为控制精度(小数点后几),然后进度控制完后如果位数不足就末尾补0. 然...
  • 最近做比特币相关的行情展示,涉及到这大量的double类型数据的处理。为了显示整齐好看,同时针对位数什么的... 误区:一开始小萌新以为控制精度(小数点后几),然后进度控制完后如果位数不足就末尾补0. 然...
  • -茎叶图-数学茎叶图又称“枝叶图”,由统计学家约翰托奇设计,它的思路将数组中的数按位数进行比较,将数的大小基本不变或变化不大的作为一主干(茎),将变化大的的数作为分枝(叶),列在主干的后面,这样就可以清楚...
  • 这两天在vs2005环境下做项目(至于什么项目在此不便多说),碰到了怎么去掉double数据后面的零0及取得double的小数部分的有效 的小问题(因为项目中的有功能的需要)。问题虽小,但我想还是有必要在此说两句,...
  • 这两天在vs2005环境下做项目(至于什么项目在此不便多说),碰到了怎么去掉double数据后面的零0及取得double的小数部分的有效 的小问题(因为项目中的有功能的需要)。问题虽小,但我想还是有必要在此说两句,一来...
  • emmmm…以前写过一类似的简单题,就是pta上面的猜猜这是什么…当时就搞不清…我以为逆序打印的话,就是交换前面和后面的数字…这错误思想一直伴随了我n月,今天发现它其实是倒着删除个位数,并且输出它 ...
  • 前提说明: 从题中我们可以看出题目中对整数的位数已经限制为5,我们在这里先不管这限制,无论输入什么数字都将其按照后面的问题输出 1.求它数? 我们平时在观察到一数字的时候,要得到其位数我们会...
  • c语言中FLT_DIG和DBL_DIG是什么意思

    千次阅读 2018-11-20 15:15:33
    这两宏在float.h头文件下面,用来说明double、float两种数据类型有效数字的位数,注意不是小数点后面的有效位数,而是所有位数。 #define DBL_DIG 15 /* # of decimal digits of precision */ #define...
  • 什么是MTOM(转载)

    2020-06-10 16:16:38
    BASE64与MTOM 傲然君 2018-01-05 10:04:17 437 已收藏 1 分类专栏: GSoap ...在源数据后面添加1或2零值字节,以使其字节数3的倍数。 编码时,新增1或2零字节中的2或4附加到源数据参与编...
  • 位域是什么? 有些数据在存储时并不需要占用一完整的字节,只需要占用一或几二进制即可。例如开关只有通电和断电两种状态,用 0 和 1 表示足以,也就是用一二进位。正是基于这种考虑,C语言又提供了一种...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 165
精华内容 66
关键字:

个位后面是什么位数