我正在通过一本名为“计算机系统:程序员的视角”的书来学习,以获得对现代计算机内部运作的一些见解。
今晚我试图查看int和unsigned的内部以查看它们的位数。我想出了这个:
#include <stdbool.h>
#include <stdio.h>
typedef unsigned char * byte_pointer;
void bp2b(byte_pointer bp, bool bits[8]){
unsigned char n;
for (n = 0; n<8; n++){
if (*bp & (1 << n))
bits[7-n] = true;
else bits[7-n] = false;
}
}
void show_byte(byte_pointer bp){
int ind;
bool bits[8];
bp2b(bp, bits);
for (ind = 0; ind < 8; ind++){
printf("%d",bits[ind]);
}
printf("\n");
}
int main(void){
int x;
x = 1;
show_byte((byte_pointer) x);
}
为什么我会遇到段错误?我对C的了解相当有限,所以不要犹豫,指出对你来说显而易见的错误。
编辑:忘了主要功能。答案 0 :(得分:2)
您将非指针值转换为指针:(byte_pointer) x
,然后取消引用它,这不会起作用。请尝试使用x
的地址并将其转换为:(byte_pointer) &x
。
进行此更改并且您的程序将运行,但请注意,将int转换为unsigned char可能会导致信息丢失,因为unsigned char的类型比int更窄(在大多数实现中)。
设置x = 255
将产生11111111
,而设置x = 256
将产生00000000
。