首页 > 其他 > 详细

整数的表示

时间:2020-09-05 13:38:14      阅读:54      评论:0      收藏:0      [点我收藏+]

整数表示

计算机中整数用补码表示:对于一个整数\(x\)的01序列\(x_{n-1}x_{n-2}...x_3x_2x_1x_0\),其\(x\)的值为\(-2^{n-1}*x_{n-1}+\sum\limits_{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("\n");
    return;
}



int main() {
    unsigned short a = 0x8000;
    printf("unsigned short向int拓展:\n");
    int ia = a;
    show_bytes((unsigned char*)&ia, sizeof(ia));

    printf("unsigned short向unsigned int拓展:\n");
    unsigned ua = a;
    show_bytes((unsigned char*)&ua, sizeof(ua));

    short b = 0x8000;
    int ib = b;
    unsigned ub = b;
    printf("short 向int拓展:\n");
    show_bytes((unsigned char*)&ib, sizeof(ib));
    printf("short 向unsigned int拓展:\n");
    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赖赖,直接把高位去掉。

整数的表示

原文:https://www.cnblogs.com/rookiezjz/p/13617487.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!