C语言进制
一 原码、反码、补码
计算机存储的数为补码
数分为有符号(正、负)和无符号(全是正)
原码
正数:数转换为2进制,最高位如果是0,则是整数
负数:数转换为2进制,最高位如果是1,则是负数
反码
正数:整数的反码还是它的原码
负数:除符号位不变,其它各位,逐位取反
补码
正数:整数的补码还是它的原码
负数:反码+1
2)为什么要使用补码?
补码主要是用于设计计算机的减法
3)已知负数的原码求补码
1)反码:除符号位之外,取反
2)补码:反码+1
4)已知补码求原码:
补码取反加1为原码
二:位运算:
一个数的二进制机器码之间的运算
C语言中的位运算符介绍:
是一个双目运算,需要有两个操作数
1)& 按位与 (比较两个数对应的数码,如果都为1,则结果为1)
口诀:同1为1
2)| 按位或(比较两个数对应的数码,如果有一个为1,则结果为1)
口诀:有1为1
3)^ 按位异或(比较两个数对应的数码,如果两个码相同则为0,不同则结果为1)
口诀:相同为0,不同为1
4)~ 按位取反(单目运算,数码逐位取反)
口诀:0变1,1变0
5)>> 按位右移
表示所有的二进制位,整体右移n位
注意:
1)数值得变化:每向右移动1位相当于除以2,保留整数部分
2)右移的时候,高位补符号位,低位直接舍弃
3)向右移动的时候,不会改变一个数的正负性
6)<< 按位左移
表示:所有的二进制位,都向左移动
左移:
1)左移可以让一个数变大
左移1次相当于*2
2)左移可能会改变一个数的正负性
3)高位舍弃,低位补0
技巧:
1)任何数和1进行按位与(&) 的到这个数的低位
三:变量的存储:
查看变量的地址使用 %p
1)内存是由若干个1个字节的存储单元组成
每个单元都有一个唯一的地址
2)内存存储数据是从高地址向地地址分配的
数据有高位和地位
int a =10;
00000000 00000000 00000001 00001010
高 低
一个整数的各个字节存放的顺序:地位存放低地址 高位存放高地址
3)变量在内存中最小的那个地址,是变量的首地址
四: 变量的修饰符:
1)改变变量的存储空间
short 2个字节 -2^15 ~ 2^15-1;
int 4
long 8
long long 8
2)改变变量的符号
signed 有符号数(默认的时有符号的)
unsigned 无符号数
五://注意:char型的常量和变量存储方式是有差别的
char c ='a'; //97 1个字节 -128,127
int size = sizeof(c); //1
//在C语言中char的常量会被当做整形数据存储
size = sizeof('a');
printf("%d\n",size);
//1、存储的原理,取出字符对应的ascii码值,转换成2进制,存储到一个字节中
char ch='A'; //65 01000001
//以字符型的形式取出来:内存存的是65,到ascii码表中查找ascii码值等于65的字符 找到这个字符取出来
printf("%c\n",ch);