zoukankan      html  css  js  c++  java
  • F#实现——计算一个字符的Ascii码中1的个数

    在做这个面试题之前,我们需要了解一下关于Ascii码的一些知识:

    •   0~31及127(共33个)是控制字符或通信专用字符(其余为可显示字符)
    •   32~126(共95个)是字符(32sp是空格),其中48~57为0到9十个阿拉伯数字
    •   65~90为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等
    •   后128个称为扩展ASCII码,目前许多基于x86的系统都支持使用扩展(或“高”)ASCII。扩展ASCII 码允许将每个字符的第8 位  用于确定附加的128 个特殊符号字符、外来语字母和图形符号

    Ok,知道这些后,先把代码贴出来:

    module CountNumberOneInChar
    
    let countsOfOneInChar(cChar : char) =
        //get the Ascii of cChar
        let ascOfcChar = int(cChar)
        match ascOfcChar with   
        | illegal when illegal < 0 || illegal >127 
                    -> failwith "illegal char..."
        | _ -> ()
        //used to count the number of 1
        let mutable count = 0
    
        for i in [1..7] do
            //shift i bits every time, ues And operation to cut the overflowed bits.
            let leftShift = (ascOfcChar <<< i) &&& 128
            //compare to 127 which is corresponding to 01111111
            if(leftShift > 127) then
                count <- count + 1
        count

    其中比较关键的是let leftShift = (ascOfcChar <<< i) &&& 128 这一句,先左移i位,在将超出后8位的位消0,也就是与128(00000000 10000000)做与操作。

    Ok,试一下:

    let xx = countsOfOneInChar 'a'

    运行结果:

    val xx : int = 3

    貌似没什么问题。。。。 做个笔记 ~:)

  • 相关阅读:
    Apache 下载+安装
    PythonWindows环境下安装Flask
    返利网今日值得买python爬虫
    flask简单web应用
    flask笔记一
    2018年11月26日
    名词解释http隧道、https、SSL层、http代理、在线代理、socks代理区别
    【HTTP/S】透明代理、匿名代理、混淆代理、高匿代理有什么区别?
    C# HttpWebRequest Post Get 请求数据
    内网穿透系列Go语言
  • 原文地址:https://www.cnblogs.com/FsharpZack/p/2763880.html
Copyright © 2011-2022 走看看