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.
     
    最后说明,如有转载请标明作者和出处,本博客所有权归博客园和本作者所有。
  • 相关阅读:
    Python os模块介绍
    (转) JAVA中如何设置图片(图标)自适应Jlable等组件的大小
    (转)统计学习-2 感知机知识准备(模型类型、超平面与梯度下降法)
    详细讲述MySQL中的子查询操作 (来自脚本之家)
    (转)详解数据库的自然连接
    MySQL 数据类型 详解
    MySql详解(四)
    MySql详解(五)
    MySql详解(七)
    MySql详解(一)
  • 原文地址:https://www.cnblogs.com/wangyichao/p/2709185.html
Copyright © 2011-2022 走看看