zoukankan      html  css  js  c++  java
  • 整数的表示

    整数表示

    计算机中整数用补码表示:对于一个整数(x)的01序列(x_{n-1}x_{n-2}...x_3x_2x_1x_0),其(x)的值为(-2^{n-1}*x_{n-1}+sumlimits_{i=0}^{n-2}2^i*x_i)

    例如x的二进制序列为1001011,(x = -2^6+2^3+2^1+2^0 = -53),也就是最高位是负的,其余都是正的。

    位的拓展和截断

    C语言中位拓展有两种方法,一种是零拓展,也就是拓展出的高位用0填充,另外一种是符号拓展,也就是拓展出的高位用符号位填充

    C语言中将一个short类型的整数拓展为int或者unsigned int类型后其位模式是怎么样的?

    做两个简单实验即可验证:

    #include <stdio.h>
    // 将一个整数的位模式打印出来
    void show_bytes(unsigned char* p, unsigned len) {
        for(int i=len-1; i>=0; --i) {
            printf("%.2X",p[i]);
        }
        printf("
    ");
        return;
    }
    
    
    
    int main() {
        unsigned short a = 0x8000;
        printf("unsigned short向int拓展:
    ");
        int ia = a;
        show_bytes((unsigned char*)&ia, sizeof(ia));
    
        printf("unsigned short向unsigned int拓展:
    ");
        unsigned ua = a;
        show_bytes((unsigned char*)&ua, sizeof(ua));
    
        short b = 0x8000;
        int ib = b;
        unsigned ub = b;
        printf("short 向int拓展:
    ");
        show_bytes((unsigned char*)&ib, sizeof(ib));
        printf("short 向unsigned int拓展:
    ");
        show_bytes((unsigned char*)&ub, sizeof(ub));
        return 0;
    }
    
    //结果为
    unsigned short 向 int 拓展:
    00008000
    unsigned short 向 unsigned int 拓展:
    00008000
    short 向 int 拓展:
    FFFF8000
    short 向 unsigned int拓展:
    FFFF8000
    

    实验结果说明用哪种方法拓展取决于需要拓展的数字是否是unsigned,如果是就用零拓展,否则就是符号拓展。

    数的截断不用bb赖赖,直接把高位去掉。

  • 相关阅读:
    JAVA URI URL 区别
    超轻量级DI容器框架Google Guice与Spring框架的区别教程详解及其demo代码片段分享
    开源框架:Apache的DBUtils框架
    java url openConnection get post 请求
    java 使用jxl poi 操作excel
    如何用Curl 来post xml 数据
    Linux Shell脚本编程--Linux特殊符号大全
    linux查看各服务状态以及开启和关闭
    eclipse中点不出来提示
    cocos2dx切换场景
  • 原文地址:https://www.cnblogs.com/rookiezjz/p/13617487.html
Copyright © 2011-2022 走看看