信息存储
大多数计算机使用8位的块,或者字节(byte),作为最小的可寻址的内存单位,而不是访问内存中单独的位。
每个十六进制数字都对16个值中的一个进行了编码。
字数据大小
字节顺序
最低有效字节在最前面的方式,称为小端法(little endian)。
最高有效字节在最前面的方式,称为大端法(big endian)。
计算机系统的一个基本概念就是: 从机器的角度看,程序仅仅是字节序列。机器没有关于原始程序的任何信息,除了可能有些用来帮助调试的辅助表之外。
位运算
&(与), |(或),~(取反)
逻辑运算
&&(与), ||(或), !(取反)
逻辑运算与位运算不是一个概念,两者的功能是不一样的。
逻辑运算认为所有非零的参数都是true ,而参数为0的表示false。同时逻辑运算有短路效应。
移位运算
向左或向右移动位模式
#include<stdio.h>
typedef unsigned char * byte_pointer;
void show_byte(byte_pointer start, size_t len){
size_t i;
for(i = 0; i < len; i++)
printf(" %.2x", start[i]);
printf("\n");
}
void show_int(int x){
show_byte((byte_pointer)&x, sizeof(int));
}
void show_float(float x){
show_byte((byte_pointer)&x, sizeof(float));
}
void show_double(double x){
show_byte((byte_pointer)&x, sizeof(double));
}
void show_pointer(void *x){
show_byte((byte_pointer)&x, sizeof(void *));
}
int main(){
int ival = 12345;
float fval = (float)ival;
int * pval = &ival;
show_int(ival);
show_float(12345.0);
show_double(12345.0);
show_pointer(pval);
printf("%d, %x\n", sizeof(int *), &pval);
printf("%d, %x\n", sizeof(int *), pval);
}