我编写了一个代码(如下所示),它将整数0存储到任意内存位置,然后打印指向此内存位置的指针和该内存位置的二进制地址。
二进制内存地址以8位长,这是我没想到的。我有4Gb的ram,所以如果整数存储在这个ram中,那么您将需要更多的8位来唯一地寻址这个ram中的一个单元格(字节)?更令人困惑的是,指针有8个符号长。如果二进制地址是8位长,那么你只需要2个符号就可以指向这个地址?
那么,为什么地址指针有8个符号,整数二进制地址位置有8位呢?
我已经从这个byte_to_binary中提取了SE Question函数。我仍然是一个初学者,所以我的代码可能不正确。
#include "stdafx.h"
#include <stdio.h>
#include <string.h> /* strcat */
#include <stdlib.h> /* strtol */
const char *byte_to_binary(int x) //code taken from-https://stackoverflow.com/questions/111928/is-there-a-printf-converter-to-print-in-binary-format
{
static char b[9];
b[0] = '\0';
int z;
for (z = 128; z > 0; z >>= 1)
{
strcat(b, ((x & z) == z) ? "1" : "0");
}
return b;
}
int main(void) //my code starts here
{
int A = 0;
int *Ap = &A;
unsigned int number = (unsigned int)Ap;
printf("%s \t %d \n \n","int Value",A); //prints the value stored in Ap as an integer
printf("%s \t %s \n \n","bin Value",byte_to_binary(A)); //prints the value stored in Ap as a binary number
printf("%s \t %p \n \n","adress Pointer",Ap); //prints pointer address as pointer type
printf("%s \t \t %s \n \n","adress",byte_to_binary(number)); //prints pointer address in binary
return 0;
}这一产出如下:
int Value 0
bin Value 00000000
adress Pointer 003FFE1C
adress 00011100
Press any key to continue . . .发布于 2014-05-05 19:33:39
是您的二进制转换函数不能正常工作。
0x003FFE1C 是00000000111111111111111000011100
你对这些东西做得还不够。
你可能会想做一个
sizeof (Ap) 看看你需要多少比特。(此处32)
您应该更改您的循环索引,以便它是位位置而不是移位值,否则您将面临溢出的风险。
for (int ii = 31 ; ii >= 0 ; -- ii)
{
if (x & (1 << ii) != 0)
strcat (b, "1) ;
else
strcat (b, "0") ;
}https://stackoverflow.com/questions/23480111
复制相似问题