zoukankan      html  css  js  c++  java
  • 深入char转换为int/unsigned int的内部机制分析

    char转换为int/unsigned int的分析
    说明:试环境为vc++ 6.0
    在vc++6.0中char是被看成signed char的,那么char所能表示的整数范围为-218--+127首先分析一下转换为int的情形:
    1,如果char表示的范围在-128--+127之间,那么,转换成整数的时候数值大小不变,例如:
    2,如果char的表示范围不在-128到+127之间,情形为取最低的8为然后转换为int,例如:
    char h=128;
    int inv=ch;//此时inv值为-128
    上面的结果为什么是-128呢?分析如下:h在内存中的内容为(从左到右依次为从高位到低位,下同)10000000(补码形式)
    把h中的内容放到inv中时,首先判断第一位为1,肯定是负数,然后把10000000转换为原码还为10000000,所以inv的值就为-128了。
    下面分析一下转换为unsigned int的情形:
    1、如果char型变量的取值为0-+127之间,转换为int型之后数值不变
    char h=i//i为0到+127之间的整数
    int inv=h//inv的值也为0到+127之间的整数
    2、如果char型变量为负值,则取低8位,如果第8为1,扩展的时候添1,如果第8为0,扩展的时候添0。例如:
    char h=-129
    unsigned int inv=h
    此时inv的值为+127,为什么呢?分析如下:-129写为二进制位101111111(补码表示),取低8位为01111111,由于第八位为0,扩展为32int时候高位添加的是0,所以inv的值为+127
    char h=-1;
    unsigned int inv=h
    此时inv的值为4294967295,即2^32—1,为什么呢?分析如下:-1写成二进制为11111111(补码表示),取低8位为11111111,由于第八位为1,扩展为32int时候高位添加的是1,所以inv的值为2的32次方减1,即4294967295。
    好了,有了上面的分析和例子,我们已经明白了char转换成int/unsigned int的内部机制,那么unsigned char转换成int/unsigned int 情况又是怎么样的呢,我相信有了上面的例子和分析,读者朋友们可以很容易得出相应的转换机制来,有兴趣的朋友自己可以试一下,这里就不在赘述了。
    The End,Thanks very much.
     
    最后说明,如有转载请标明作者和出处,本博客所有权归博客园和本作者所有。
  • 相关阅读:
    I NEED A OFFER!
    水题 Codeforces Round #303 (Div. 2) A. Toy Cars
    模拟 HDOJ 5099 Comparison of Android versions
    模拟 HDOJ 5095 Linearization of the kernel functions in SVM
    贪心 HDOJ 5090 Game with Pearls
    Kruskal HDOJ 1863 畅通工程
    Kruskal HDOJ 1233 还是畅通工程
    并查集 HDOJ 1232 畅通工程
    DFS/并查集 Codeforces Round #286 (Div. 2) B
    水题 Codeforces Round #286 (Div. 2) A Mr. Kitayuta's Gift
  • 原文地址:https://www.cnblogs.com/wangyichao/p/2709185.html
Copyright © 2011-2022 走看看