进制转化及数据类型

1.进制的表示

进制:进位计数制,10进制,7进制(周),24进制(小时),60进制(分和秒)
十进制:12345.6 == 1*10^4 + 2*10^3 + 3*10^2 + 4*10^1 + 5*10^0 + 6*10^-1  按权重展开相加   
二进制(0~1,共两个符号,前面加一个0):10101 == 1*2^4 + 0*2^3 + 1*2^2 + 0*2^1 + 1*2^0 = 16+4+1 = 21
八进制(0~7,共八个符号): 123 == 1*8^2 + 2*8^1 + 3*8^0 == 64+16+3 == 83
十六进制(0~9,a~f/A~F, 一共是16个符号,前面加上0x/0X):1a1 == 1*16^2 + 10*16^1 + 1*16^0 == 256+160+1 == 417 

(下面的整数值全是无符号值,假设下面使用的都是一字节的整数)
第一个问题:其他进制怎么转化成10进制?   按权重展开相加
第二个问题:10进制怎么转化成其他进制?
10进制->2进制:1.基数相除,倒序取余   2.一直凑
100 -> 110 0100
123 -> 0111 1011
234 -> 1110 1010(不考虑正负)
10进制->8进制,16进制的方法(1.先将10进制值转换成2进制,2.再将2进制转换成我们所需要的8进制或16进制)
10进制->8进制(1.将其转换成2进制 2.从右向左,三三分组,左边不够的话补符号位)
100 -> 001 100 100  ->  0144(八进制)
10进制->16进制(1.将其转换成2进制 2.从右向左,四四分组,左边不够的话补符号位)
100 -> 0110 0100 -> 0x64(十六进制)
8进制如何转换16进制:先变成2进制,再转16进制
练习题:
10->8:
    124->001 111 100 ->174
    88 ->001 011 000 ->130
10->16:
    111->0110 1111 -> 6f
    66 ->0100 0010 -> 42

2.整数数据类型和小数数据类型
C语言有哪些基础数据类型:
整型:char(1,迷你的整形值), short(2), int(2/4,默认), long(4), long long(8)


浮点值:float(4) double(8,默认),(long double可以类似当做double处理)
//布尔类型:bool ==  unsigned char
//unsigned(无符号)  signed(有符号)  最高位当做符号位  0表示整数  1表示负数
第一个问题:long和int都是4个字节,为什么设计成两个?

int是2/4(32和64位下区别不同)
第二个问题:编译器为什么给设计出来这么多的内置类型?

让你根据不同的需求去选择不同的数据类型
第三个问题:每一个数据类型的范围大概是多少?
例如:char类型   8个位  能表示的数值可能性有2^8==256种   
如果unsigned char(无符号)的范围是0~255
如果 char(默认有符号)的范围是-128 ~ 127 

3.原码;反码;补码;

原码,反码,补码:最高位当做符号位  0表示正数  1表示负数
无符号整数:按权展开相加
有符号整数:
    正数:原码 == 反码 == 补码
    负数:1.将其绝对值按位取反,得到反码 2.对反码+1得到补码
    -12:0000 1100 -> 1111 0011 -> 1111 0100
    -13:0000 1101 -> 1111 0010 -> 1111 0011
    127:0111 1111 三码合一
    -128:1000 0000 -> 0111 1111 -> 1000 0000
    -1:0000 0001 -> 1111 1110 -> 1111 1111
    -1+1 = 1111 1111 -> 10000 0000 -> 0000 0000
short(2^16==65536   有符号范围为-32768~32767) 
int(2^32==42亿多, 有符号范围为-20E ~ 20E)     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值