忙里偷闲( ˇˍˇ )闲里偷学【C语言篇】——(8)枚举、补码

一、枚举

# include <stdio.h>

enum WeekDay  //定义了一个数据类型(值只能写以下值)
{
	MonDay, TuesDay, WednesDay, ThursDay, FirDay, SaturDay, SunDay
};
int main(void){
	enum WeekDay day = WednesDay;
	printf("%d\n", day);
	
	return 0;
}
输出结果:2
把一个事物所有可能一一列举出来
优点:代码更安全
缺点:书写麻烦

二、补码

1、几个概念

编码:在计算机中存储数据的方式

原码:也叫 符号——绝对值码

最高位0表示正 1表示负, 其余二进制位是该数字的绝对值的二进制位

如 5 ———— 00000101

  -5 ———— 11110101

原码简单易懂

加减运算复杂

存在加减乘除四种运算,增加了CPU运算的复杂度

零的表示不唯一

反码:反码运算不便,也没有在计算机中应用

移码:移码表示数值平移n位, n称为移码量

移码主要用于浮点数的阶码的存储

补码:

十进制转二进制

正数转二进制

除2取余,直至商为零,余数倒叙排序

负数转二进制

先求与该负数相对应的正数的代码,然后将所有位取反,末尾加1,不够位数时,左边补1 

零的二进制是零

/*
	一个验证程序
	2012年2月5日20:20:26
*/
# include <stdio.h>

int main(void){
	int i = -100;
	printf("%#x\n", i);
/*
	100转十六进制64----->二进制 0110 0100---->取反 1001 1011
	加1  1001 1100 末尾加1  0xffffff9c
*/	
	return 0;
}
//输出结果:0xffffff9c
二进制转十进制

如果首位是0,则表明是正数,按普通方法来求

如果首位是1,则表明是负整数

将所有位取反,末尾加1,所得数字就是该负数的绝对值

/*
	一个验证程序
	2012年2月5日20:30:42
*/
# include <stdio.h>

int main(void){
	int i = 0xffffffef;
/*
1111....101111
取反加1后 0000....010001 对应十六进制11  十进制 17
*/
	printf("%d\n", i);
	return 0;
}
//输出结果:-17
2、在vc++6.0中一个int类型的变量所能存储的数字的范围是多少?
8位二进制所代表的十进制示意图
 二进制 十进制
0000 0000 -----------  0
0000 0001 -----------  1
.........
0111 1111 ----------- 127
1000 0000 --取反加1-- -128
1000 0001 --取反加1-- -127
1000 0010 --取反加1-- -126
.........
1111 1111 --取反加1-- -1
所以int类型变量所能存储的最大正数用十六进制表示是: 0x7fff ffff
int类型变量所能存储的绝对值最大的负数用十六进制表示是:0x8000 0000

/*
	一个验证程序
	2012年2月5日20:57:10
*/
# include <stdio.h>

int main(void){
	char cha = 0x7f; //0111 1111   127
	printf("%d\n", cha);

	char ch = 0x80;  //1000 0000   -128
	printf("%d\n", ch);
	
	char c = 128;   // 1000 0000   -128
	printf("%d\n", c); 
	
	return 0;
}
//输出结果:
//127
//-128
//-128





posted on 2014-04-17 22:39  岚之山  阅读(209)  评论(0)    收藏  举报

导航