学习总结,分享快乐。 望指正错误, 共同提高!!!
分类: C/C++
2015-04-24 21:10:32
1> 数据类型:
C数据类型 |
32位机 |
64位机 |
_Bool (-std=c99) |
1 |
1 |
char |
1 |
1 |
short |
2 |
2 |
int |
4 |
4 |
long |
4 |
8 |
long long |
8 |
8 |
指针变量 |
4 |
8 |
float |
4 |
8 |
double |
8 |
8 |
long double |
12 |
16 |
NOTE:
1》 程序中的立即数,编译器会根据他的大小从int开始分配类型。
2》 11L: 本来编译器会给他分配一个int类型, 加后缀强制用long类型来存储,LL, ULL一样
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2> unsigned 与signed数据编码:
1》unsigned :
eg:unsigned
int u = 0x11223344;
地址 |
大端 |
小端 |
0x03 |
0x44 |
0x11 |
0x02 |
0x33 |
0x22 |
0x01 |
0x22 |
0x33 |
0x00 |
0x11 |
0x44 |
大端:最高有效字节在低地址。
小段:最低有效字节在低地址。 (以后都用小端表示)
双端: ARM-V7 支持双端。^_^
note: 想声明一个无符号常量应后缀 U ,
2》signed: 用补码表示。
正数补码 = 本身
负数补码 = ~ 原码 + 1
int i = -1;
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
16进制:0xffffffff //看到 -1 , 你要知道是这个 ^_^
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
3>
signed 与 unsigned之间的转换:(只是表示变了,计算机内位存储不会变的)
1》signed → unsigned:
signed char s = -1 ;
S >= 0 |
S |
S < 0 |
s + 2 ^ W (w: 变量类型的位数)| 2 ^8 -1 = 255, 0xff |
2》unsigned → signed
unsigned char u = 255;
signed char s = u;
u >= 2^(w-1) |
u - 2^w |
u < 2^(w-1) |
u |
2^(
8-1 ) = 128, u = 255-256 = -1
NOTE :
1》>公式解释:unsigned → signed,主要看最高位的符号位,也就是与2^(w-1)比较。
2》> 隐式转换:singned 与 unsigne 运算:signed → unsigned
Xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
4> 溢出问题:
算数运算溢出:指完整的整数结果不能放到数据类型的字长限制中去。
1》无符号溢出
unsigned char c = 5;
unsigned char d = 255;
unsigne char e = a + d;
X + y < 2^w |
X + y |
2^w <= X + y < 2^(w+1) |
x+y -2^w |
e
= 255 + 5 -256 = 4
2》有符号溢出
2^(w-1) <= x+y |
x+y-2^w 正溢 |
-2^(w-1) <= x+y < 2^(w-1) |
x+y 正常 |
x+y < -2^(w-1) |
x+y+2^w 负溢 |
Xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
5> 位运算(都要按位)
OR |
AND |
NOT |
EXCLUSIVE-OR |
| |
& |
~ |
^ |
异或运算:首先2个位值不同(异), 然后(或) 运算那结果肯定是1了
NOT :中文是: 取反
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
6> 逻辑运算(结果只有1和0)
逻辑或运算 |
逻辑与运算 |
逻辑非运算 |
|| |
&& |
! |
Xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
7> 移位运算
操作 |
值 |
|
参数 x |
[0111 1111] |
[1111 1111] |
X << 4 |
[1111 0000] |
[1111 0000] |
X >> 4(逻辑右移) |
[0000 0111] |
[0000 1111] |
X >> 4(算术右移) |
[0000 1111] |
[1111 1111] |
Note:
1》unsigne 整数类型数据【>>】必须采用【逻辑】右移。
2》算术右移:右移K位在最左端补K位最高有效位。
3》signed整数类型大多采用 算术右移。
Xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx