- A+
内存单元,即1B,我们说char型占一个内存单元(1B),而short型占2个内存单元。1B被当成整体来看,但不要忘记有下边的等式成立
1B = 8 bits
1个字节有8个位,每个位有0,1两个取值,从这个角度上说,一个字节所能包含的意义似乎比预想的要大的多。
位运算输出原码或补码
不多说直接上代码
#include<stdio.h>
#include<stdlib.h>
struct bits
{
unsigned char b1 : 1;//1位 高位在后
unsigned char b2 : 1;
unsigned char b3 : 1;
unsigned char b4 : 1;
unsigned char b5 : 1;
unsigned char b6 : 1;
unsigned char b7 : 1;
unsigned char b8 : 1; //地位在前
};
void main(){
int num = 1;// 0000 0000 0000 0000 0000 0000 0000 0001
// 0000 0001 地位
// 0000 0000
// 0000 0000
// 0000 0000 高位
printf("%d\n", sizeof(struct bits));// 一个字节
struct bits *pbit;
pbit = (struct bits *)malloc(sizeof(struct bits)*4); //*4 4个字节
int *pint;
pint = (int *)pbit;//共享内存
*pint = 0;//初始化
scanf_s("%d", pint);//根据地址 初始化
for (int i = 3; i >= 0; i--)
{
printf("%d%d%d%d% d%d%d%d",
pbit[i].b8,
pbit[i].b7,
pbit[i].b6,
pbit[i].b5,
pbit[i].b4,
pbit[i].b3,
pbit[i].b2,
pbit[i].b1);
printf("\n");
}
float fl;
printf("\n");
printf("%d\n", sizeof(fl));//四个字节
scanf_s("%f", &fl);
unsigned char *p = (unsigned char*)&fl;//共享内存
// 让p 的地址等于 fl的地址 然后让其 以 char 类型来计算
// 1111 1111 一个字节 A = p+0 = p[0]
// 1111 1111 一个字节 B = p+1 = p[1]
// 1111 1111 一个字节 C = p+2 = p[2]
// 1111 1111 一个字节 D = p+3 = p[3]
// 1&1=1
// 0&1=0 与1& 不变化
// 0&0=0
// 1&0=0 与0& 都为零
// 所以就可以打印了
for (int i = 3; i >= 0; i--){
unsigned char chs = p[i];//按照字节取出数据
for (int j = 7; j >= 0; j--){
// 1011 0010 chs
// 0000 0001经过 <<7后变成 1000 0000
// 1000 0000 第一次结果 非零
//第二次
//1011 0010
//0100 0000
//0000 0000 //结果0
//第三次
//1011 0010
//0010 0000
//0010 0000 //结果非零
if (chs &(1 << j)){
printf("1");
}
else{
printf("0");
}
if (j == 4){
printf(" ");
}
}
printf("\n");
}
system("pause");
}
持续更新中
- 我的微信
- 这是我的微信扫一扫
-
- 我的微信公众号
- 我的微信公众号扫一扫
-