基本概念(部分 、C语言)

-------------------学习笔记

1.基本数据类型大小

c语言:
基本数据类型大小/(byte)32位系统64位系统
char11
short22
int 48
long48
float44
double88
各种指针类型48

ps: example: int类型   32bit
 最大值:  2^31-1  最小值:-2^31-1  还有一位存储符号
00000000 00000000 00000000 00000000  (二进制)
红色代表符号位

2.原码、反码、补码


有符号符号的数据类型:
原码:
原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值.
原码是人脑最容易理解的表示。
反码:
正数的反码是其本身
负数的反码:符号位不变,其余各个位的值取反。
        [10000001]   原码
        [11111110]   反码
 
 

补码:

正数的补码就是其本身

负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)

-1             [10000001]   原码
                [11111110]   反码
   补码 + 1 = [11111111]   补码


3.隐式转换 :

C语言规定的转换规则是由低级向高级转换。
例如,如果一个操作符带有两个类型不同的操作数时,那么在操作之前行先将较低的类型转换为较高的类型,然后进行运算,运算结果是较高的类。

注意:在表达式中,所有的float类型都转换为double型以提高运算精度。
example:
<pre name="code" class="cpp"><span style="font-size:18px;">	 a = -3;
	unsigned int b = 2;
	long c = a + b;
	printf("%ld", c);</span>
 相加时  因为32位系统 与64位系统 long的大小不一样  所以情况不同
unsigned int 最大可表示2^32-1
int 最大可表示2^31-1
这样int 就会转换为 unsigned int, 由于y<0, 即y的最高符号位是1, 转换为unsigned int 后最高位不在是符号位。

(int)-3 = 10000000 00000000 00000000 00000011(原码)
     11111111 11111111 11111111 11111100(反码)
             11111111 11111111 11111111 11111101(补码)
a + b =  11111111 11111111 11111111 11111101 + 00000000 00000000 00000000 00000010
= 11111111 11111111 11111111 11111111 
32位系统 long 4byte  所以a + b = -1     =   11111111 11111111 11111111 11111111 (补码)
64位系统 long 8byte 所以 a + b= 2^32 = 4294967295

4.位运算

1.&   按位  与
运算:对应的两个二进制 均为1时 ,结构为1, 否则为0
example: 9 & 5 = 1
1001
0101
结果:0001 =  1
example: x % 8 == x & 7

2.|   按位    或
运算:对应的两个二进制只要有一个为1时 ,结果为1, 否则为0
example: 9 | 5 = 13
1001
0101
结果:1101 = 13
3. ^ 按位   异或
运算:对应的两个二进制 不相同为 1, 否则为 0
example: 9^5 = 12
1001
0101
结果:1100 = 12
ps: 相同整数 异或为 0      5^ 5 = 0
     不同整数 异或 结果和顺序无关  
     任何数和 0 异或  结果不变  
4.~ 按位  取反
运算:对整数的 每一位取反 ,符号也要取反
example: ~9 = -10
00000000 00000000 00000000 00001001
取反111111111 111111111 111111111 111110110

求其原始数据
求其补码
10000000 00000000 00000000 00001001 = -10
5.  <<  左移
example: x<<n  =  x * 2^n
运算:把x的二进制位向左移动 n个单位, 高位丢弃, 低位补0

6. >> 右移
example: x>> n = x / 2^n
运算:把x的二进制位向右移动n个单位, 低位丢弃, 符号位不变,但是符号要跟着移动
也就是不改变正负

5.大端机器及小端机器

所谓大端就是指   高位值在内存中放低位地址,所谓小端是指低位值在内存中放低位地址。

判断机器是何种机器的小代码
<pre name="code" class="cpp"><span style="font-size:18px;">#include <iostream>
using namespace std;

union
{
	int number;
char s;
}test;


bool testBigEndin()
{
test.number=0x01000002;
    return (test.s==0x01);
}
int main()
{
	if (testBigEndin())
		cout<<"Big-Endian<<endl;
	else
		cout<<"litter-Endian"<<;

return 0;
}</span>


 
 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值