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赖赖,直接把高位去掉。

  • 相关阅读:
    排序算法(06. 快速排序)
    webpack4.0(02.本地服务和html-webpack-plugin插件)
    HTTP状态码整理
    数据结构与算法考察的知识点
    webpack4.0(01.基础配置和初识)
    数据结构与算法简记--Trie树
    数据结构与算法简记--字符串匹配
    数据结构与算法简记--堆和堆排序
    推荐MarkDown编辑工具Typora--文本画流程图示例
    数据结构与算法简记--二叉树
  • 原文地址:https://www.cnblogs.com/rookiezjz/p/13617487.html
Copyright © 2011-2022 走看看