0x1001为低地址,0x1004为高地址
对于这样一个数:0x74251234
很显然74在最高位上,34在最低位上
74251234所对应:[0111 0100 ...... 0011 0100]
74对应的二进制补码:0111 0100,对应最高位字节
34对应的二进制补码:0011 0100,对应最低位字节
大端与小端
对于一个占用多个字节的数据:
例如 int a=0x01234567;
(假设起始地址为0x1001)
好吧,翻译为 对应 补码:
0000 0001
| 0010 0011
| 0100 0101
| 0110 0111
4个字节
对于大端模式:
最高位字节 0000 0001 → 最低位字节 0110 0111
对于小端模式:
最低位字节 0110 0111 → 最高位字节 0000 0001
左值(lvalue)和右值(rvalue)
lvalue:在内存中占有确定位置,在内存中可以寻址的。一个左值是指向一个指定内存的东西。
一些报错:
&(&i)//[Error] lvalue required as unary '&' operand,一元"&"操作数需要为左值
(&i)++//[Error] lvalue required as increment operand,增量操作数需要为左值
int var;
var = 4; // 可以 var 是一个左值, 因为 var占确定内存空间
4 = var; //ERROR! 4 和 var+10 没有确定的内存空间 他们只是计算的周期驻留在了临时的寄存器中
(var + 10) = 4; //ERROR!
int a[5]={1,2,3,4,5};
int *p=a;
printf("%d",&(p+1)); // Error, p+1 不是 左值 ,p占有确定空间,但是 p+1并没有
rvalue:不是lvalue的都是 rvalue
int& foo(){
return 2;
}
error: invalid initialization of non-const reference of type 'int&' from an rvalue of type 'int'
用"int"类型的右值初始化"int&"类型的非常量引用无效