---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------
一: 进制1.默认就是10进制
int num =12;
2.在前面加上一个0就代表八进制
int num1 =014;
3.%d是以十进制的方式输出一个整数
printf("%d\n", num1);
4.%o是以八进制的方式输出一个整数
printf("%o\n", num);
5.在数值前面加上0b就代表二进制
int num2 =0b1100;
6. 在数值前面加上0x就代表十六进制
int num3 =0xc;
printf("%d\n", num2);
7.%x是以十六进制的方式输出一个整数
printf("%x\n", num);
8.口诀:不看你怎么存,只看你怎去取
进制转换
十进制 -> 二进制
例:
9 --> 1001
转换原理:除2取余 倒序读取
二进制 --> 十进制
例:
1001 --> 9
1 * 2(0) = 1
0 * 2(1) = 0
0 * 2(2) = 0
1 * 2(3) = 8
1 + 0 + 0 + 8 = 9
转换原理:乘以2的幂数(幂数从0开始), 然后相加
N位二进制的取值范围
1位 取值范围 0~1 0~2的1次方-1
2位 取值范围 0~3 0~2的2次方-1
3位 取值范围 0~7 0~2的3次方-1
n位 取值范围 0~2(n)-1
二进制转换为八进制 进制越大表示的位数就越短
规律:三个二进制位代表一个八进制位
因为3位的最大取值是7 而八进制是逢八进一
例如:12
000 0
001 1
100 4
014
二进制转换为十六进制
规律:四个二进制位代表一个十六进制位
因为4位的最大取值是15, 而十六进制是逢十六进一
0000 0
1100 c
0xc
二: 原码 补码 反码正数的特点:(三码合一) 正数的原码就是TA的反码就是TA的补码
二进制的最高位我们称之为符号位
如果符号位是0代表是一个正数,
如果符号位是1代表是一个负数
10000000 00000000 00000000 00001100 (-12的原码)
11111111 11111111 11111111 11110011(反码,符号位不变其它位取反)
11111111 11111111 11111111 11110011
+00000000 00000000 00000000 00000001
_____________________________________________
11111111 11111111 11111111 11110100(补码 ,反码+1)
结论:无论正数负数在内存中存储的都是补码
三:变量的存储细节
内存分配存储空间是由大到小的分配 (会从字节地址比较大的字节开始分配)
变量也有自己的地址:变量所占用的存储空间中最小的字节地址就是变量的地址
内存寻址由大到小
%p打印地址
&取地址符
四: 位运算
位运算都是针对二进制的
&
|
^
<<
>>
~
~ 按位取反
特点: 0变1 1变0
<< 左移
a << n 把整数a的二进制位往左边移n位
移出的位砍掉,低位补0, 发现左移会把原有的数值变大
左移的应用场景:当要计算某个数乘以2的n次方的时候就用左移,效率最高
注意点:左移有可能改变数值的正负性
>> 右移
a >> n 把整数a的二进制位往右边移n位
移出的位砍掉, 缺少的以为最高位是0就补0是1就补1(是在当前操作系统下)
右移的应用场景:当要计算某个数除以2的N次方的时候就用右移,效率最高
& 按位与
特点:只有对应的两位都是1才返回1 否则返回0
口诀: 一假则假
1001
& 0101
_______
0001
1001
&1111
______
1001
规律:任何数按位与上1结果还是那个数
| 按位或
特点:只要对应的两位其中一位是1就返回1
口诀:一真则真
1001
| 0101
________
1101
^ 按位异或
特点:对应的两位不相同返回1 相同返回0
多个整数按位异或的结果和顺序无关
int result = 9 ^ 5 ^ 6;
int result = 9 ^ 6 ^ 5;
相同整数按位异或结果是0
int result3 = 9 ^ 9;
任何整数按位异或上0结果不变
int result4 = 9 ^ 0 ;
任何整数按位异或上另一个整数两次结果还是那个数
int result5 = 9 ^ 9 ^ 5;
int result6 = 9 ^ 5 ^ 9;
五: 类型说明符
1.说明长度
int
4个字节 -2(15)~2(15)-1
输出int 用 %d
short :
2个字节 -2(15)~2(15)-1
应用场景:当整型变量的取值范围不大的时候可以使用short修饰,这样可以节省内存空间
short int == short
输出short %hd
long
8个字节 -2(63)~2(63)-1
如果要赋值给一个long修饰的变量 一般会在常量后面加上l/L
如果要输出一个long修饰的变量,用%ld
long int == long
long long
8个字节 -2(63)~2(63)-1
如果要赋值给一个long long修饰的变量 一般会在常量后面加上ll/LL
如果要输出一个long long修饰的变量,用%lld
long long int == long long
2.说明符号位
signed 有符号 -2(31)~2(31)-1
有符号就代表着二进制的最高位用来表示符号位
正数/负数/零
signed基本上是个废物,因为int类型默认就是有符号的
signed int == signed
unsigned 无符号 0 ~2(32)-1
无符号就代表着二进制的最高位不用来表示符号位
零/正数
unsigned int == unsigned
输出unsigned %u
---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------
黑马程序员 c语言----进制 位运算学习
最新推荐文章于 2023-07-08 23:10:52 发布