Hogan's Blog


  • Home

  • Archives

python简单爬虫示例

Posted on 2018-06-11
    常用User Agent

    http://blog.csdn.net/kang_tju/article/details/52563374
    http://blkstone.github.io/2016/03/02/crawler-anti-anti-cheat/
    https://www.waitig.com/python-%E7%88%AC%E8%99%AB%E4%B8%80%E4%BA%9B%E5%B8%B8%E7%94%A8%E7%9A%84uauser-agent.html
    https://www.zhihu.com/question/19553117

    https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent/Firefox
    http://www.webapps-online.com/online-tools/user-agent-strings/dv/browser51854/firefox
    https://developers.whatismybrowser.com/useragents/explore/software_name/firefox/9
    https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Browser_detection_using_the_user_agent

    http://tools.jb51.net/table/useragent
    https://zhuanlan.zhihu.com/p/21252983
    http://www.gooseeker.com/doc/thread-1829-1-1.html
    http://www.skyfox.org/useragent.html
    http://blog.csdn.net/tao_627/article/details/42297443
    http://blog.csdn.net/u012175089/article/details/61199238
    https://www.bbsmax.com/A/GBJr7eZ950/
    https://www.bbsmax.com/A/Vx5MjWWgdN/
    http://www.361way.com/ieua/692.html
    http://www.jianshu.com/p/da6a44d0791e
    http://blog.csdn.net/qianqianstd/article/details/52185488
    http://www.360doc.com/content/12/1012/21/7662927_241124973.shtml
    http://blog.sina.com.cn/s/blog_9513526f0101pjvt.html
    http://www.966266.com/jishu/32.html
    http://www.cftea.com/c/2010/08/M3TS2JCPZ0IQOW60.asp
    http://techseo.cn/python/31.html

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    USER_AGENTS = [
    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)",
    "Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
    "Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)",
    "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",
    "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)",
    "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)",
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)",
    "Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6",
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1",
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0",
    "Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5",
    "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko Fedora/1.9.0.8-1.fc10 Kazehakase/0.5.6",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20",
    "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52",
    ]

    # 随机生成user-agent
    class RandomUAMiddleware(object):

    def process_request(self, request, spider):
    request.headers["User-Agent"]=random.choice(USER_AGENTS)


    USER_AGENTS = [
    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)",
    "Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
    "Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)",
    "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",
    "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)",
    "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)",
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)",
    "Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6",
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1",
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0",
    "Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5",
    "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko Fedora/1.9.0.8-1.fc10 Kazehakase/0.5.6",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20",
    "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52",
    ]


    USER_AGENTS = [
    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)",
    "Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
    "Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)",
    "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",
    "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)",
    "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)",
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)",
    "Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6",
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1",
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0",
    "Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5",
    "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko Fedora/1.9.0.8-1.fc10 Kazehakase/0.5.6",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20",
    "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52",
    ]

    if __name__=="__main__":
    def process_request(self, request, spider):
    request.headers["User-Agent"]=random.choice(USER_AGENTS)

    python 有一个现成的随机生成UA(user-agent)的第三方库:fake-useragent 直接:pip install
    fake-useragent 即可。 使用:

    from fake_useragent import UserAgent
    ua = UserAgnet()
    ua.random

    Read more »

pycharm使用问题记录

Posted on 2018-06-11
    Pycharm shortcuts reference link

    http://blog.csdn.net/u013088062/article/details/50100121
    http://www.jianshu.com/p/23e52f7b8ec7

    Read more »

pandas使用问题记录

Posted on 2018-06-11
    Pandas reference links

    http://pandas.pydata.org/pandas-docs/stable/
    http://pandas.pydata.org/pandas-docs/stable/api.html

    http://www.cnblogs.com/chaosimple/p/4153083.html
    http://www.shizhuolin.com/2015/04/19/978.html
    https://ericfu.me/10-minutes-to-pandas/

    http://blog.csdn.net/xiaodongxiexie/article/details/53108959
    http://blog.csdn.net/wr339988/article/details/65446138

    Pandas进阶
    http://dataunion.org/23394.html
    http://cloga.info/python/%E6%95%B0%E6%8D%AE%E7%A7%91%E5%AD%A6/2013/09/17/pandasintro
    http://www.jianshu.com/p/682c24aef525
    https://www.joinquant.com/post/1198
    https://wolfsonliu.github.io/archive/python-xue-xi-bi-ji-pandas.html
    https://stream886.github.io/2016/12/18/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E5%B8%B8%E7%94%A8%E6%93%8D%E4%BD%9C%E7%AC%94%E8%AE%B0%E2%80%94%E2%80%94Python%E4%B9%8BPandas%E5%8C%85/
    http://xxuan.me/2017-09-28-pandas.html
    https://github.com/familyld/learnpython/blob/master/Efficient_Pandas_Skills.md
    http://xight.top/2015/10/23/pandas-%E6%8C%87%E5%8D%97-2/
    https://zhuanlan.zhihu.com/p/21598982
    http://kekefund.com/2016/06/17/pandas-groupby/

    Read more »

mysql使用问题记录

Posted on 2018-06-11
    Window安装mysql 5.7.19压缩包

    https://my.oschina.net/u/2557245/blog/876028
    http://www.jianshu.com/p/b601097ef5c9
    http://www.phperz.com/article/16/0703/231878.html
    http://blog.csdn.net/tanghong1996/article/details/71330666
    http://www.bkjia.com/Mysql/1198992.html
    http://www.bkjia.com/Mysql/1221297.html
    http://www.cnblogs.com/ldybyz/p/7138444.html
    http://www.2cto.com/database/201707/660725.html

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    1. 解压缩压缩包

    2. 设置环境变量
    新建MYSQL_HOME变量值为刚才下载解压缩后的自定义目录的bin目录下
    如:
    MYSQL_HOME: D:\Codes\mysql-5.7.19-winx64
    PATH环境变量添加Mysql的路径: %MYSQL_HOME%\bin

    3. 以管理员身份运行命令提示符
    cd D:\Codes\mysql-5.7.19-winx64\bin

    4. 安装myql
    mysqld install

    5. 初始化data目录
    https://dev.mysql.com/doc/refman/5.7/en/data-directory-initialization-mysqld.html

    mysqld --initialize --console
    mysqld --initialize-insecure --console

    从5.7.6版开始,Zip压缩包不再提供data目录,所以也不会有MySQL系统数据库的数据文件,我们需要使用mysqld --initialize或者--initialize-insecure对数据库进行初始化

    --initialize:初始化时会随机生成一个root用户密码,改密码会以日志的方式打印出来,如果控制台没有密码可能记录在日志文件下,在Windows上可以使用--console选项把信息打印到控制台。使用mysqld –initialize方法安装会生成一个随机字符串组成的密码,这个密码在错误日志<mysql解压目录>\data\<计算机用户名>.err中可以找到。

    --initialize-insecure:不会生成随机密码,但是在登录服务器是可以使用--skip-password跳过密码输入:mysql -u root --skip-password。

    6. 启动mysql服务
    net start mysql
    Read more »

markdown使用问题记录

Posted on 2018-06-11

    markdown语法

    http://markdown.tw/
    http://blog.leanote.com/post/freewalk/Markdown-%E8%AF%AD%E6%B3%95%E6%89%8B%E5%86%8C
    https://zh.wikipedia.org/wiki/Markdown
    https://segmentfault.com/markdown
    https://www.gitbook.com/book/vincent4j/markdowncn/details
    http://wowubuntu.com/markdown/
    http://www.jianshu.com/p/q81RER
    https://coding.net/help/doc/project/markdown.html

    Read more »

macbook使用问题记录

Posted on 2018-06-11

    .bash_profile

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    hoganchens-MacBook-Pro:~ hogan.chen$ cat .bash_profile

    # added by Anaconda3 4.2.0 installer
    export PATH="/Users/hogan.chen/anaconda/bin:$PATH"

    alias ussh='ssh hogan@10.211.55.3'
    alias masterssh='ssh hogan@10.211.55.7'

    alias vssh='vagrant ssh'
    alias vstatus='vagrant status'
    alias vlist='vagrant box list'
    alias vgntup='vagrant up'
    alias vhalt='vagrant halt'

    alias sshvehicle='cd ~/RoadDB/vehicle; vagrant ssh'
    alias sshcloud='cd ~/RoadDB/cloud; vagrant ssh'
    alias sshbackend='cd ~/RoadDB/backend; vagrant ssh'

    alias tovehicle='cd ~/RoadDB/vehicle'
    alias tocloud='cd ~/RoadDB/cloud'
    alias tobackend='cd ~/RoadDB/backend'

    # use the one of them to change the command line color
    export CLICOLOR=1
    #alias ls='ls -G'

    alias ll='ls -alrt'
    alias grep='grep --color'
    Read more »

yaml使用问题记录

Posted on 2018-06-11
    YAML语法

    https://learnxinyminutes.com/docs/yaml/
    http://yaml.org/
    http://yaml.org/spec/
    http://yaml.org/refcard.html
    http://www.yaml.org/spec/1.2/spec.html
    https://zh.wikipedia.org/zh-cn/YAML
    http://pyyaml.org/wiki/PyYAMLDocumentation
    http://www.jianshu.com/p/5cf2f00b6656
    http://www.ruanyifeng.com/blog/2016/07/yaml.html
    http://www.yduba.com/biancheng-8553099226.html
    http://blog.leanote.com/post/ozaki.lsc@gmail.com/YAML%E8%AF%AD%E6%B3%95
    http://docs.saltstack.cn/topics/yaml/index.html
    http://www.stay-stupid.com/?p=357

    Read more »

comcka单元测试框架使用记录

Posted on 2018-06-11
    build example
    1
    2
    3
    4
    5
    6
    7
    8
    9
    hogan@ubuntu:~/framework/cmocka/tests$ gcc -o test_ordering_fail test_ordering_fail.c -I ../build/ -I ../include/ -lcmocka

    hogan@ubuntu:~/framework/cmocka/tests$ gcc -o test_skip test_skip.c -lcmocka

    hogan@ubuntu:~/framework/cmocka/tests$ gcc -o test_ordering test_ordering.c -I ../build/ -I ../include/ -lcmocka

    cd ~/share/framework/cmocka/build/example
    make clean
    make

C++语言问题记录

Posted on 2018-06-11
    读写文件

    http://www.runoob.com/cplusplus/cpp-files-streams.html
    http://blog.csdn.net/kingstar158/article/details/6859379

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    到目前为止,我们已经使用了 iostream 标准库,它提供了 cin 和 cout 方法分别用于从标准输入读取流和向标准输出写入流。

    本教程介绍如何从文件读取流和向文件写入流。这就需要用到 C++ 中另一个标准库 fstream,它定义了三个新的数据类型:
    数据类型 描述
    ofstream 该数据类型表示输出文件流,用于创建文件并向文件写入信息。
    ifstream 该数据类型表示输入文件流,用于从文件读取信息。
    fstream 该数据类型通常表示文件流,且同时具有 ofstream 和 ifstream 两种功能,这意味着它可以创建文件,向文件写入信息,从文件读取信息。

    要在 C++ 中进行文件处理,必须在 C++ 源代码文件中包含头文件 <iostream> 和 <fstream>。
    打开文件

    在从文件读取信息或者向文件写入信息之前,必须先打开文件。ofstream 和 fstream 对象都可以用来打开文件进行写操作,如果只需要打开文件进行读操作,则使用 ifstream 对象。

    下面是 open() 函数的标准语法,open() 函数是 fstream、ifstream 和 ofstream 对象的一个成员。

    void open(const char *filename, ios::openmode mode);

    在这里,open() 成员函数的第一参数指定要打开的文件的名称和位置,第二个参数定义文件被打开的模式。
    模式标志 描述
    ios::app 追加模式。所有写入都追加到文件末尾。
    ios::ate 文件打开后定位到文件末尾。
    ios::in 打开文件用于读取。
    ios::out 打开文件用于写入。
    ios::trunc 如果该文件已经存在,其内容将在打开文件之前被截断,即把文件长度设为 0。

    您可以把以上两种或两种以上的模式结合使用。例如,如果您想要以写入模式打开文件,并希望截断文件,以防文件已存在,那么您可以使用下面的语法:

    ofstream outfile;
    outfile.open("file.dat", ios::out | ios::trunc );

    类似地,您如果想要打开一个文件用于读写,可以使用下面的语法:

    fstream afile;
    afile.open("file.dat", ios::out | ios::in );

    关闭文件

    当 C++ 程序终止时,它会自动关闭刷新所有流,释放所有分配的内存,并关闭所有打开的文件。但程序员应该养成一个好习惯,在程序终止前关闭所有打开的文件。

    下面是 close() 函数的标准语法,close() 函数是 fstream、ifstream 和 ofstream 对象的一个成员。

    void close();

    写入文件

    在 C++ 编程中,我们使用流插入运算符( << )向文件写入信息,就像使用该运算符输出信息到屏幕上一样。唯一不同的是,在这里您使用的是 ofstream 或 fstream 对象,而不是 cout 对象。
    读取文件

    在 C++ 编程中,我们使用流提取运算符( >> )从文件读取信息,就像使用该运算符从键盘输入信息一样。唯一不同的是,在这里您使用的是 ifstream 或 fstream 对象,而不是 cin 对象。


    #include <iostream>
    #include <string>
    #include <fstream>

    using namespace std;

    int main()
    {
    string str("MS/SAM/NGIS/BV-03-C");
    ofstream logfile;

    while ((pos = str.find('/')) != str.npos)
    {
    str.replace(pos, 1, "_");
    }

    string filename = str.append(".txt");

    // logfile.open(filename.c_str(), ios::app);
    logfile.open(filename.c_str(), ios::trunc);
    logfile << "hello world" << endl;
    logfile.close();

    return 0;
    }

    Read more »

C语言问题记录

Posted on 2018-06-11
    原码,反码和补码

    http://www.itwendao.com/article/detail/8172.html
    https://yq.aliyun.com/wenji/72426
    http://blog.csdn.net/liushuijinger/article/details/7429197
    https://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html
    http://blog.chinaunix.net/uid-29603939-id-4216336.html
    http://blog.sina.com.cn/s/blog_6b87c7eb010186mp.html

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    我们知道在计算机系统中,数值一律用补码来表示(存储)。主要原因是使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。

    补码表示法(two's complement representation)可以防止0的机器数重码,同时又解决了原码和反码无法表示-8的问题,这样就极大的简化了计算机的硬件设计。

    什么是数制?用来表示数值的规则,如十进制,二进制.

    机器数

    用二进制的形式来表示数;最高位为符号位,1表示负数,0表示正数.

    如: 1---->00000001;-1---->1000 0001

    真值

    从上面我们知道了机器数是计算机用来表示数的一种形式,但是用于最高位是符号位。这样就出现这样情况,1000 0001表示的真正数值为1,而不是129.这样我们把一个机器数表示的真正的实际的意义的值称之为真值。

    原码、反码、补码

    总体上来讲原码反码补码都是计算机本身用来存储数的一种方式。
    原码

    规则:符号位+真值的绝对值

    如:[+1]原码=0000 0001;

    [-1]原码=1000 0001;
    反码

    规则:正数反码为本身

    负数反码为原码的取反,但符号位不变

    如:[+1]原码=[+1]反码=0000 0001;

    [-1]原码=1000 0001=[-1]反码=1111 1110;
    补码

    规则:正数补码为本身

    负数补码为原码的反码的基础之上加1

    如:[+1]原码=[+1]补码;

    [-1]原码=1000 0001=[-1]反码=1111 1110=[-1]补码=1111 1111;

    为何会出现三种表示方式?

    通过上面三种我们得到正数1在各种情况下都是一致的:[+1]原\反\补码=0000 00001;

    而反码不是一致的。

    在计算机内部,为了将运算变得简单。将符号位也投入到运算之中来,这样不需要计算机去分析符号位的作用。但是我们发现

    [+1]原码=0000 0001+[-1]原码=1000 0001=0000 00001=1;而不是0,这样一来就出现了错误。如何解决这个问题呢?

    为了解决这个问题,反码出现了

    [+1]原码+[-1]原码=1000 0001=[+1]反码=0000 0001+[-1]反码=1111 1110=0000 0000(反码)=0000 0000 (原码)=-0;

    这样一来解决了原码之间运算的问题,但是问题又出现了-0=1000 0000(原码);+0=0000 0000 (原码);这样在计算机看来不一样。是没有意义的。

    [+1]原码+[-1]原码=1000 0001=[+1]补码=0000 0001+[-1]补码=1111 1111=0000 0000(补码)=[0000 0000](原码)

    这样用[0000 0000](原码)表示0就不会出现问题了。

    总的来说,在整数中,原码和补码、反码都是一样的,对于负数反码在符号位不变的情况下各位取反所得;补码为反码基础上加1.而原码补码反码的出现都是为了满足在计算机在运算过程更加简单和便捷而出现的。

    Read more »
123

Hogan Chen

29 posts
11 tags
© 2020 Hogan Chen
Powered by Hexo
|
Theme — NexT.Muse v5.1.4