有符号整数使用多少字节?

发布于 2025-01-12 13:33:16 字数 1180 浏览 1 评论 0原文

这是显示整数和字符的十六进制和二进制表示的代码。

#include <stdio.h>
#include <string.h>

typedef unsigned char byte;

void show_bytes(byte *bytes , int len)
{
    for(int i=0; i<len; i++) {
    printf("%-9.2X",bytes[i]);
}
printf("\n");
}

void show_binary(byte *bytes , int len)
{
    for(int i=0; i<len; i++) 
    {
        byte b = bytes[i];
        for(int j=sizeof(byte)*8-1; j>=0; j--)  
        {
            printf("%c" ,((1<<j)&b)?'1':'0');
        }
        printf(" ");
        }
        printf("\n");
}
void show_int(int x)
{
    printf("Integer: %d\n",x);
    show_bytes ((byte *)&x, sizeof(int));
    show_binary ((byte *)&x, sizeof(int));
}
void show_string(char *x)
{
    printf("String: %s\n", x);
    show_bytes ((byte *)x, strlen(x));
    show_binary ((byte *)x, strlen(x));
}

int main()
{
    show_int (-5);
    show_string("abcd");
}

这段代码的结果如下 代码结果 问题是如何读取整数和字符的结果,根据我的理解,-5 的二进制表示是,

11111011 11111111 11111111 11111111

而字符 'a' 是

01100001

这样吗?它是以有符号的大小、一个补码还是两个补码存储的?

This is a code to display the hexadecimal and binary representations of integers and characters.

#include <stdio.h>
#include <string.h>

typedef unsigned char byte;

void show_bytes(byte *bytes , int len)
{
    for(int i=0; i<len; i++) {
    printf("%-9.2X",bytes[i]);
}
printf("\n");
}

void show_binary(byte *bytes , int len)
{
    for(int i=0; i<len; i++) 
    {
        byte b = bytes[i];
        for(int j=sizeof(byte)*8-1; j>=0; j--)  
        {
            printf("%c" ,((1<<j)&b)?'1':'0');
        }
        printf(" ");
        }
        printf("\n");
}
void show_int(int x)
{
    printf("Integer: %d\n",x);
    show_bytes ((byte *)&x, sizeof(int));
    show_binary ((byte *)&x, sizeof(int));
}
void show_string(char *x)
{
    printf("String: %s\n", x);
    show_bytes ((byte *)x, strlen(x));
    show_binary ((byte *)x, strlen(x));
}

int main()
{
    show_int (-5);
    show_string("abcd");
}

And the results of this code is as follow
Code Result
The question is how to read the result for both the interger and character, from my understanding the binary representation of -5 is

11111011 11111111 11111111 11111111

while for character 'a' is

01100001

is it right? And is it stored in signed magnitude, one’s complement, or two’s complement?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

回忆躺在深渊里 2025-01-19 13:33:16

有符号整数使用多少字节?

printf("%zu\n", sizeof(int));  // Often 4

How many bytes are used for signed integer?

printf("%zu\n", sizeof(int));  // Often 4
本王不退位尔等都是臣 2025-01-19 13:33:16

根据您的程序输出,您的平台似乎具有 32 位整数并且是小端字节序。因此,作为小端字节序,序列 FB FF FF FF 意味着 int 的实际值为 FFFFFFFB,即 -5 32 位 2 的补码。

Based on your program output, it appears that your platform has 32-bit integers and is little-endian. So, being little-endian, the sequence FB FF FF FF means that the actual value of the int is FFFFFFFB, which is -5 in 32-bit 2's complement.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文