进制转换,计算 还有各种数据类型和字符
2016-07-27 20:14
211 查看
进制的转换,还有它们之间的计算
二进制 八进制 十六进制转换成十进制
例如:(111011)=2^5+2^4+2^3+2^1+2^0
(136)=8^2+3*8^1+6*8^0
(1F2A)=16^3+15*16^2+2*16+10*16^0
二进制转换成八进制
例如 001 101 000 101 三个一组得到结果 1 5 0 5
二进制转换成十六进制
例如 0011 0100 0101 四个一组得到结果 3 4 5
十进制转换成二进制的问题就是 除以2的问题 除不尽就写1 除尽就加0 没除一次写一次 直到剩下最后一个数 是1就写1 是0就写0
十进制小数转为二进制 方法是乘于2取整
例如 0.625*2=1.25 取整1
0.25*2=0.5 取整0
0.5*2=1 取整1
0.625(十进制)=0.101(二进制)
0.25(十进制)=0.01(二进制)
0.5 (十进制)=0.1(二进制)
C语言类型 : 构造类型 :数组,结构体,公用体
指针类型
空类型(void)
基本类型 : 字符类型(char)
枚举类型(enum)
数值类型:整型:短整型(short)2个字节
整型(int)4个字节
长整型(long)
实型:单精度(float)
双精度(double)8个字节
单目运算符 :sizeof运算符:用来计算操作数在内存中占据的字节数 注意sizeof不是函数
例如sizeof(long); 返回四字节
sizeof(int); 不确定 取决于不同的系统
sizeof(short); 返回两字节
运行printf(“%d”,sizeof(int)); 返回四字节
原码 反码与补码
例如 原码 反码 补码
+7 0000 0111 0000 0111 0000 0111
-7 1000 0111 1111 1000 1111 1001
+0 0000 0000 0000 0000 0000 0000
-0 1000 0000 1111 1111 0000 0000
范围都是 0111 1111------1111 1111 (-127——+127)
注意:正数的原码 反码 补码为它本身
负数的原码 反码 补码最前一位是符号位 1表示正号 0表示负号
口诀: 原码转补码 先取反得到反码,在加一位(也就是进一)
补码转原码 先退一位(也就是退一) 得到反码 然后取反 得到原码
例题
#include<stdio.h>
void main(){
int i=31;
int j=-2;
printf("%x,%x",&i,&j);
getchar();
}
0x0032F85C fe ff ff ff cc cc cc cc cc cc cc cc 14
//-2的地址,fe用的是两个字节
显示的是补码,
f= 1 1 1 1
e= 1 1 1 0
1 1 1 1 1 1 1 0
转换成原码
符号位不动,先减一 也就是
1 1 1 1 1 1 0 1
然后取反
1 0 0 0 0 0 1 0
得到的答案就是-2
0x0037FAD0 001f 0000 cccc cccc
//显示的是31地址 001f是用十六进制数表示的,可以转换回去
正数的原 反 补码都是它本身
例如给定一个十进制数 -33
先转换成二进制数1 0 1 0 0 0 0 1
这就是内存中的原码 //最开头的1表示的是负号
转换成反码 1 1 0 1 1 1 1 0 //符号位不会发生改变
最后就是在最后一位加一 就是 1 1 0 1 1 1 1 1
通过程序运行获取得到的内存位置找到的数,那个数是补码
可以通过先减一再取反的办法获得原码,将原码转换成十进制就得到了原数
规则就是最开头那位不能改变,还有注意加一减一的机制
#include<stdio.h>
void main(){
unsigned short i=65535;
printf("%x",&i); //获取i的地址(十六进制)为ffff
i++;
printf("%u",&i); //获取加一后 i的地址变为了0000
getchar();
}
类型 类型关键字 长度 取值范围
有符号字符型 [signed]char 8 -127——+127 (-2^7-----+2^7)
无符号字符型 unsigned char 8 0——255 (0-------2^8 -1)
有符号短整型 [signed] short(int) 16 -32767——+32767 (-2^15-------+2^15)
无符号短整型 unsigned short(int) 16 0——65535 (0-------2^16)
有符号长整形 [signed] long(int) 32 -2147483647——+2147483647
无符号长整形 unsigned long(int) 32 0——4294967295
单精度类型 float 32 约(-3.4*10^-38-----+3.4*10^-38)
双精度类型 double 64 约(-1.7*10^-308------+1.7*10^-308)
浮点型数据
单精度:四个字节 有效数字6到7位
双精度:八个字节 有效数字15到16位
案例代码:
字符常量:用的是单引号‘’ 字符常量的值对应它们自身的ASCII码值
例如: char ch;
ch=‘A’;
字符串常量:用的是双引号“” 字符串是结束标志 \0
例如 “Helloworld” Helloworld\0
字符常量和字符串常量是两个不同的概念
区别:'a' 得到的是a
“a”得到的结果是a\0
字符‘1’和整数1是两个不同的概念
前天不会的那个类似于bug的运算方式
源文件
#include<stdio.h>
#include<stdlib.h> //引用头文件
#include"niupi.h"
一 二 三 四 五
七 三 "哈咯" 四 十
九 三 四 十
六
输出的是哈咯
头文件
#define 一 void
#define 二 main 全局常量定义的值不会改变 分别替换 ,此程序可以运行
#define 三 (
#define 四 )
#define 五 {
#define 六 }
#define 七 printf
#define 九 getchar
#define 十 ;
混易乱易
while(0){
} // 0代表的是false 所以此循环不会被运行
while(1){
} // 1代表的是true 所以这是一个死循环
二进制 八进制 十六进制转换成十进制
例如:(111011)=2^5+2^4+2^3+2^1+2^0
(136)=8^2+3*8^1+6*8^0
(1F2A)=16^3+15*16^2+2*16+10*16^0
二进制转换成八进制
例如 001 101 000 101 三个一组得到结果 1 5 0 5
二进制转换成十六进制
例如 0011 0100 0101 四个一组得到结果 3 4 5
十进制转换成二进制的问题就是 除以2的问题 除不尽就写1 除尽就加0 没除一次写一次 直到剩下最后一个数 是1就写1 是0就写0
十进制小数转为二进制 方法是乘于2取整
例如 0.625*2=1.25 取整1
0.25*2=0.5 取整0
0.5*2=1 取整1
0.625(十进制)=0.101(二进制)
0.25(十进制)=0.01(二进制)
0.5 (十进制)=0.1(二进制)
C语言类型 : 构造类型 :数组,结构体,公用体
指针类型
空类型(void)
基本类型 : 字符类型(char)
枚举类型(enum)
数值类型:整型:短整型(short)2个字节
整型(int)4个字节
长整型(long)
实型:单精度(float)
双精度(double)8个字节
单目运算符 :sizeof运算符:用来计算操作数在内存中占据的字节数 注意sizeof不是函数
例如sizeof(long); 返回四字节
sizeof(int); 不确定 取决于不同的系统
sizeof(short); 返回两字节
运行printf(“%d”,sizeof(int)); 返回四字节
原码 反码与补码
例如 原码 反码 补码
+7 0000 0111 0000 0111 0000 0111
-7 1000 0111 1111 1000 1111 1001
+0 0000 0000 0000 0000 0000 0000
-0 1000 0000 1111 1111 0000 0000
范围都是 0111 1111------1111 1111 (-127——+127)
注意:正数的原码 反码 补码为它本身
负数的原码 反码 补码最前一位是符号位 1表示正号 0表示负号
口诀: 原码转补码 先取反得到反码,在加一位(也就是进一)
补码转原码 先退一位(也就是退一) 得到反码 然后取反 得到原码
例题
#include<stdio.h>
void main(){
int i=31;
int j=-2;
printf("%x,%x",&i,&j);
getchar();
}
0x0032F85C fe ff ff ff cc cc cc cc cc cc cc cc 14
//-2的地址,fe用的是两个字节
显示的是补码,
f= 1 1 1 1
e= 1 1 1 0
1 1 1 1 1 1 1 0
转换成原码
符号位不动,先减一 也就是
1 1 1 1 1 1 0 1
然后取反
1 0 0 0 0 0 1 0
得到的答案就是-2
0x0037FAD0 001f 0000 cccc cccc
//显示的是31地址 001f是用十六进制数表示的,可以转换回去
正数的原 反 补码都是它本身
例如给定一个十进制数 -33
先转换成二进制数1 0 1 0 0 0 0 1
这就是内存中的原码 //最开头的1表示的是负号
转换成反码 1 1 0 1 1 1 1 0 //符号位不会发生改变
最后就是在最后一位加一 就是 1 1 0 1 1 1 1 1
通过程序运行获取得到的内存位置找到的数,那个数是补码
可以通过先减一再取反的办法获得原码,将原码转换成十进制就得到了原数
规则就是最开头那位不能改变,还有注意加一减一的机制
#include<stdio.h>
void main(){
unsigned short i=65535;
printf("%x",&i); //获取i的地址(十六进制)为ffff
i++;
printf("%u",&i); //获取加一后 i的地址变为了0000
getchar();
}
类型 类型关键字 长度 取值范围
有符号字符型 [signed]char 8 -127——+127 (-2^7-----+2^7)
无符号字符型 unsigned char 8 0——255 (0-------2^8 -1)
有符号短整型 [signed] short(int) 16 -32767——+32767 (-2^15-------+2^15)
无符号短整型 unsigned short(int) 16 0——65535 (0-------2^16)
有符号长整形 [signed] long(int) 32 -2147483647——+2147483647
无符号长整形 unsigned long(int) 32 0——4294967295
单精度类型 float 32 约(-3.4*10^-38-----+3.4*10^-38)
双精度类型 double 64 约(-1.7*10^-308------+1.7*10^-308)
浮点型数据
单精度:四个字节 有效数字6到7位
双精度:八个字节 有效数字15到16位
案例代码:
字符常量:用的是单引号‘’ 字符常量的值对应它们自身的ASCII码值
例如: char ch;
ch=‘A’;
字符串常量:用的是双引号“” 字符串是结束标志 \0
例如 “Helloworld” Helloworld\0
字符常量和字符串常量是两个不同的概念
区别:'a' 得到的是a
“a”得到的结果是a\0
字符‘1’和整数1是两个不同的概念
前天不会的那个类似于bug的运算方式
源文件
#include<stdio.h>
#include<stdlib.h> //引用头文件
#include"niupi.h"
一 二 三 四 五
七 三 "哈咯" 四 十
九 三 四 十
六
输出的是哈咯
头文件
#define 一 void
#define 二 main 全局常量定义的值不会改变 分别替换 ,此程序可以运行
#define 三 (
#define 四 )
#define 五 {
#define 六 }
#define 七 printf
#define 九 getchar
#define 十 ;
混易乱易
while(0){
} // 0代表的是false 所以此循环不会被运行
while(1){
} // 1代表的是true 所以这是一个死循环
相关文章推荐
- AB 模拟测试秒杀
- POJ2007 Scrambled Polygon 凸多边形顶点输出
- linux内核中的文件描述符(一)--基础知识简介
- 数据结构实验之链表五:单链表的拆分
- 垂直居中问题
- O2O倒逼汽车行业改革:服务超越销售成重心
- 铺地毯
- 网络流模版
- HDOJ 1010-Tempter of the Bone【dfs】
- python ldle是什么?
- Fragment的pause和resume
- 安卓aidl夸进程通信的小例子,
- hdu 5616 Jam's balance ( 动态规划 )
- linux下怎么挂载U盘
- 复习4
- LintCode111 之爬楼梯
- 实现上拉加载更多的SwipeRefreshLayout
- UVA 10566 Crossed Ladders (几何+二分)
- ACL
- poj 1426 Find The Multiple