首页 > 解决方案 > 当我们在 C 中将一个数字转换为一个较小的数字时,究竟会发生什么?

问题描述

假设我有这样的事情:

unsigned int x = (unsigned int)SomeLong;

SomeLong如果不适合 4 个字节,究竟会发生什么?新的内存布局是什么样的?在 C 中将数字转换为较小大小的数字究竟是如何工作的?怎么了?

标签: ccastingnumbers

解决方案


它会截断内存。这个程序显示了这一点,它显示了 long 的二进制表示,然后将 long 的二进制表示转换为更小的 int:

#include <stdio.h>
void Print8Byte(unsigned long Value) {
    for (unsigned char i = 0; i < 64; i++) {
        union {
            unsigned long Value;
            unsigned First:1;
        } Cast = {.Value = Value>>i};
        putchar('0'+Cast.First);
    }
    putchar('\n');
}
int main(int argc, char *argv[]) {
    unsigned long Num = 0x284884848; //Arbitrary Value
    Print8Byte(Num);
    Print8Byte((unsigned int)Num);
}

结果:

0001001000010010000100010010000101000000000000000000000000000000 000100100001001000010001001000010000000000000000000000000000


推荐阅读