有符号整数使用多少字节?
这是显示整数和字符的十六进制和二进制表示的代码。
#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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
根据您的程序输出,您的平台似乎具有 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 theint
isFFFFFFFB
, which is -5 in 32-bit 2's complement.