数据类型
数据的输入和存储。可以分为
A.基本数据类型(四类八种)
(整形: int(4个字节) 短整型short(2个字节) 长整形long(8个字节) 字节byte (1个字节8位) ) int:32 位、最常用,-2^31-1~2^31 (21 亿)
(浮点型: 单精度浮点数float(4个字节) 双精度浮点数double(8个字节) )
(字符: char(在C语言中占1位 在java c# 中占2个字节 ) char 本质就是个数!二进制的,显示的时候,经过“处理”显示为字符。 )
(布尔类型: true 和 false )
B.引用数据类型
(类,接口,数组)
变量
(变量的本质是内存中一段存储空间)
IntI; i=5;
i是变量,程序向系统申请了一个内存单元,在程序运行中,i的值可以改变,但程序结束后,其所占的空间不是释放,而是被系统收回权限。
进制
补码
问题:
一个int类型的变量所能存储的数组的范围是多少? -2^31~2^31-1
最小负数的二进制代码是多少?1000 0000 0000 0000 0000 0000 0000 0000
最大正数的二进制代码是多少?0111 1111 1111 1111 1111 1111 1111 1111
已知一个整数的二进制代码求出原始的数字?FFFFFFF5 ---> -11
数字超过最大正数会怎么样?例如一个数1位的二进制是0111 1111(127)+0000 1010(10) = 1000 1001 =》 -119
不同的数据类型相互转换?char ch = 128 printf("%d",ch) -127 int->char 0000 0000 0000 0000 0000 0000 1000 0000 代表128 那么这是char只有8个字节 所有将int左边多出的字节省去 就剩1000 0000 就是 -127
原码:也叫符号 绝对值码
最高位0表示正 1表示负 ,其余二进制位是该数字的绝对值的二进制位(-5(八位的二进制数) 表示10000101 因为负号是1,5是0000101)
优点:简单易懂 缺点:加减运算复杂 存在加减乘除四种运算,增加了CPU的复杂度零的表示不唯一(100000000或者0000000)
在计算机中,从未被使用!
-----------------------------------------
反码:
反码运行不便,也没有在计算机中应用
-----------------------------------------
移码:
移码表示数值平移n位,n称谓移码量,移码主要用于浮点数的阶码的存储
-----------------------------------------
补码:(在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。)
A已知十进制求二进制
求正整数的二进制
除2取余,直到商为零,余数倒序排列
求负整数的二进制
先求出与该负数相对应的正整数的二进制代码,
然后,将所有位取反末尾加1,不够位数时,左边补一
4字节int-5先求5的二进制
0000 0000 0000 0000 0000 0000 0000 0101 所有位取反,末尾加1
1111 1111 1111 1111 1111 1111 1111 1011 16进制:FFFFFFFB
2字节short int(-3)先求3的二进制
0000 0000 0000 0011所有位取反,末尾加1
1111 1111 1111 1101 用十六进制表示: FFFD
求零的二进制
全是零(100000000000....这表示最小的负数)
B已知二进制求十进制
如果首位是0,则表明是正整数,
按普通方法来求
如果首位是1,则表明是负整数,
将所有位取反末尾加1,所得数字就是该负数的绝对值
习题:FFFFFFF5 已知二进制 求其代表的整数是多少?
1111 1111 1111 1111 1111 1111 1111 0101
由于最高位是1,所以最终是负数,先对其所有取反
0000 0000 0000 0000 0000 0000 0000 1010 末尾加1后
0000 0000 0000 0000 0000 0000 0000 1011 该值为11 所以最终结果:-11
位运算符(现实意义,对数据的操作精确到每一位)
提问 如果想让一个数的第五位为零 要怎么操作?
int a ; a = a&1111101111 这样a的第5位就一定位零 其他位不变。
& ---按位与(&&逻辑与 也叫并且)&& 与&的含义完全不同(短路运算符一般有:&&、||,其原理是:当有多个表达式时,左边的表达式值可以确定结果时,就不再继续运算右边的表达式的值。)而& 1 不具备短路用途
1&1 = 1 1&0 = 0 0&1 = 0 0&0 = 0 5&7 = 5 21&7 = 5 5&1 = 1 5&10 = 0
5->00000101 7->00000111 00000101&00000111 = 000000101
| ---按位或 (||逻辑或 )
1|0 = 1 1|1 = 1 0|1 = 1 0|0 = 0 5|7 = 7 5|3 = 7
~ ---按位取反 (~i 就是把i变量所有的二进制位取反)
~0101 -》1010
^ ---按位异或(相同为0 不同为1)
1^0 = 1 0^1 = 1 0^0 = 0 1^1 = 0 5^3 = 7
<< ----按位左移(数向左移动几位数 补零)
5>>1 = 50 (相当于乘于10^1次方) 二进制 0101>>2 010100 (相当于乘于2^2次方)
>> ---按位右移()
网友评论