数据类型的定义,进制,原码 反码 补码。

原码:正数的原码最高位是0;负数的原码最高位是1.

反码:正数的反码与原码相同,负数的反码是原码的取反 最高位不变。

补码:正数补码与原码相同。负数的补码是反码进行加1。

溢出:在数据进行操作的时候会导致超出数据类型大小,会向前位进1,多于原始数据类型大小,会被系统自动舍弃 保留从后面开始数据类型大小的位数  

 

计算机中存的都是补码。进行计算的时候也是用补码进行计算。

计算机不能进行减法操作,做的都是加法操作。

 

1、数据类型的定义

1、数据类型的定义
变量的定义:
数据类型 变量名【标识符】 
变量的赋值:
变量名 = 值;
数据类型 变量名【标识符】 = 值
 
标示符的命名规则:
1、字母、数字、下划线
2、不能以数字开头
3、见名知义
4、不能和同一函数内的其他标示符重复
5、不能使用C语言关键字
6、区分大小写
 
标示符:
ABC
abc
—abc
_abc.
123_bac
a_b_123
 
常量的定义:
1、const 数据类型 常量名
2、【宏定义】#deifne 常量名 值
注意:
1、通过#define 定义的常量 是根据值来匹配数据类型的
2、const 修饰的常量是不安全 可以通过指针来修改
 
 
2、进制:
二进制:
     二进制逢二进一,所有的数组是0、1组成
十进制转二进制:
除二反序取余法:将十进制数每次除以2 取出余数 按照结果倒叙依次获取结果
二进制转十进制:
权值法:将二进制数各个位数从0位开始乘以2的N幂 将各个位数的结果相加
八进制:
     八进制逢八进一,所有的数组是0到7组成
十进制转八进制:
除八反序取余法:将十进制数每次除以8 取出余数 按照结果倒叙依次获取结果
 
十六进制:
     十六进制逢十六进一,所有的数组是0到9和A到F组成 字母不区分大小写
十进制转八进制:
除十六反序取余法:将十进制数每次除以16 取出余数 按照结果倒叙依次获取结果
 
8421法则:
将各个位数的二进制用十进制中的【数字 】来表示多位的二进制数 通过【数字 】相加就可以得到二进制数的数据
8 1000
4 100
2 10
1 1
1000
  100
    10
      1
————
1 1 1 1
 
进制在程序中打印:
int a=10;//十进制中的10
int b=010;//八进制中的10 在程序中定义一个八进制数需要在数前面加上0区分
int c=0x10;//十六进制中的10在程序中定义一个十六进制数需要在数前面加上0x区分
int d=0X10;//十六进制中的10在程序中定义一个十六进制数需要在数前面加上0X区分
注意:在程序中没有办法表示一个二进制数
%d 将数据按照十进制输出
%o将数据按照八进制输出
%x将数据按照十六进制小写输出
%X将数据按照十六进制大写输出
 
3、原码、反码、补码
一个有符号的整型数据可以分为两部分一部分是符号位、一部分是数字位
无符号数据类型只包含数字位部分
signed int a= 1986(有符号标识 signed可以不用写) 
二进制:11111000010
 
1986原码:0000 0000 0000 0000 0000 0111 1100 0010
-1986原码:1000 0000 0000 0000 0000 0111 1100 0010
 
1986反码: 0000 0000 0000 0000 0000 0111 1100 0010
-1986反码:1111 1111 1111 1111 1111 1000 0011 1101
 
1986补码: 0000 0000 0000 0000 0000 0111 1100 0010
-1986反码:1111 1111 1111 1111 1111 1000 0011 1110
                 1 0000 0000 0000 0000 0000 0000 0000 0000
溢出:在数据进行操作的时候会导致超出数据类型大小,会向前位进1,多于原始数据类型大小,会被系统自动舍弃 保留从后面开始数据类型大小的位数  
 
  10+20
0000 1010
0001 0100
0001 1110
-10+-20
原码:1000 1010
反码:1111 0101
补码:1111 0110
 
原码:1001 0100
反码:1110 1011
补码:1110 1100
     1111 0110
     1110 1100
补码:1110  0010
反码:1110 0001
原码:1001 1110 16+8+4+2=-30
 
练习:用生辰年份年去生辰日期
1992
-326
1、将10进制转化为二进制
     1992 :0000 0000 0000 0000 0000 0111 1100 1000
     -326 :0000 0000 0000 0000 0000 0001 0100 0110
2、加符号位将数据变为原码
     1992 :0000 0000 0000 0000 0000 0111 1100 1000
     -326 :1000 0000 0000 0000 0000 0001 0100 0110
3、转化为反码
     1992 :0000 0000 0000 0000 0000 0111 1100 1000
     -326 :1111 1111 1111 1111 1111 1110 1011 1001
4、将反码+1转化为补码
     1992 :0000 0000 0000 0000 0000 0111 1100 1000
     -326 :1111 1111 1111 1111 1111 1110 1011 1010
5、计算补码
     1992 :0000 0000 0000 0000 0000 0111 1100 1000
     -326 :1111 1111 1111 1111 1111 1110 1011 1010
     结果  :  1 0000 0000 0000 0000 0000 0110 1000 0010
6、将数据转化为10进制
110 1000 0010
2+128+512+1024 = 1666
无符号:
unsigned int a= 1986
无符号:1111 1111 1111 1111 1111 1111 1111 1111 = 
             0000 0000 0000 0000 0000 0000 0000 0000 =0
无符号整型取值:0-4294967295(2^32-1)
无符号的字符型:0-255
有符号:
     int a= 1986
     0111 1111 1111 1111 1111 1111 1111 1111 = 2147483647
     0000 0000 0000 0000 0000 0000 0000 0001
原码: 1111 1111 1111 1111 1111 1111 1111 1111 = -2147483647
反码:1000 0000 0000 0000 0000 0000 0000 0000
补码:1000 0000 0000 0000 0000 0000 0000 0001=-2147483647
-0的补码
补码:1000 0000 0000 0000 0000 0000 0000 0000=-0 = -2147483648
 
 
 
4、sizeof()
求出数据类型在内存中占的大小(BYTE)
int value  =sizeof(变量名);
int value = sizeof(数据类型) sizeof 数据类型
注意:根据32位操作系统获取的数据类型大小
char(字符型)【1】<short(短整型)【2】
<=int(整型)【4】|float (单精度浮点型)【4】|long(长整型)【4】
<long long(长长整型)【8】|double(双精度浮点型)【8】
 
输出和输入:
输出字符的两种方式:
1、printf("%c",变量)
2、putchar(字符)
输入字符的两种方式:
1、scanf("%c",&b变量)
2、变量=getchar()
 
 
char 1B=8bit
0x7f
0111 1111
0000 0010
1000 0001
1000 0000
1111 1111 -127
0xff 
1111 1111
0000 0001
1 0000 0000
 
5、数据类型:
字符型:
char 用于存储一个单一的字符
在格式化输入printf("%c",变量)通过占位符%c来接收的
每一个char类型都对应在ASCII中有具体的值
例如:数字【0】对应的ASCII值为48
字母【A】对应的ASCII值为65
字母【a】对应的ASCII值为97
转义字符:
计算机会使用一些字符来完成程序设计,如果在编程中想使用这些字符的本意,需要通过【\】来转义
注意:想在控制台中输出%  需要使用【%%】
 
 
浮点型:
float 用于存储带有小数的数据
在格式化输入printf("%f",变量)通过占位符%f来接收的
 
double 用于存储带有小数的数据 数据长度比float更长
注意:因为将小数转化为二进制时不是一个精确的值,所以浮点型都会有数据偏差
 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值