黑马程序员_iOS开发C语言基础之二进制内存存储解析与字符操作
2014-09-28 23:06
393 查看
1、内存中变量的二进制存储
#include <stdio.h>int main()
{
// 一个int类型数据占据4个字节、32bit
// 0000 0000 0000 0000 0000 0000 0000 1100
// 内存分配地址由大到小,放数据也是由大到小
// 变量的首地址是地址中最小值
int number = 12; // 1100
int number2 = 13; // 1101
printf("%p\n",&number);
printf("%p\n",&number2);
return 0;
}
.089 == 0.089
十六进制字母大小写都行
96f是错误的,f前只能放小数。
15.4e6 表示15.4*10的6次方 e后要是整数
2 、正负数在内存中的存储形式
#include <stdio.h>int main()
{
void putBinary(int);
putBinary(12);
putBinary(-12);
putBinary(13);
return 0;
}
// 输出一个整数的二进制存储形式
void putBinary(int n )
{
int bits = sizeof(n)*8;
while (bits-->0)
{
printf("%d", n>>bits&1);
if (bits%4==0) printf("
");
}
printf("\n");
}
int long long long 所占的字节数和多少位数的编译器有关,可以用sizeof验证
int s = sizeof(int); long long c1 = 123434ll; long int c2 = 12l;
long unsigned int = long unsigned %u
3、位运算符注意事项
/* 按位与 &1001
0101
-----
0001
*/
/*int a = 9 & 5;
printf("%d\n",a );
return 0;*/
/*
按位异或 ^ (搜狗中文环境下符号“……”使用shift+6)
异或可以交换 2^3^4 = 4^2^3
与0异或,数值不变 与1异或,相当于把数值按位取反
9^5^9 = 9^9^5=5 a^b^a == 0^b == b
*/
/*
按位取反 ~
~0000 0000 0000 0000 0000 0000 0000 1001
1111 1111 1111 1111 1111 1111 1111 0110
-10
按位取反连同符号位也会被取反
*/
/*
左移 <<
很可能把符号位改变
*/
/*
右移 >>
最高位用符号位补充
*/
4、利用两种方式实现两个变量值的交换
// 实现两个变量值交换int a = 10;
int b = 11;
// 利用算术运算
/*
a=b-a; // a --> 11-10
b=b-a; // b --> 11-(11-10) -->10
a=b+a; // a --> 10 + 11 -10 -->11
*/
// 利用按位异或^运算
a = a^b; // a --> 10^11
b = a^b; // b --> 10^11^11 -->10
a = a^b; // a -->10^11^10 -->11
printf("a=%d,b=%d\n",a ,b);
5、利用位运算判断一个数的奇偶性
// 利用按位&运算符判断奇偶性 奇偶数的最后一位为0,表示偶数,为1时是奇数;与0b1进行按位与&int c = 11;
c & 0b1 ? printf("奇数\n")
: printf("偶数\n”);
6、编写一个函数,输出其在内存中的二进制形式
// 编写一个函数,输出整数在内存中的二进制形式int d = 9;
void printBinary(int number);
printBinary(d);
return 0;
}
void printBinary(int number)
{
int temp = (sizeof(number)<<3) -1;
for(int i=temp;i>=0;i--)
{
int m = (number >> i)& 0b1;
printf("%d",m );
if(i%4==0)printf("
");
}
printf("\n");
}
7、字符操作注意事项
#include <stdio.h>int main()
{
int a = 9;
// 字符‘A’在内存中存放的ASCII码值65(十进制)的二进制0100
0001形式
char c = 'A';
printf("%d\n",c );
printf("%c\n",65);
printf("%d\n",'A');
char c2 = 'A'+33; //
98 'b'
printf("%c - %d \n",c2 ,c2);
int num = 6; // 0000 0110
char c3 ='6'; // 54d = 32+16+4+2 0011 0110
printf("%d - %d\n",num ,c3);
/*
ASCII码表
字符 ASCII码值
A 65
B 66
*/
//char c = '男'; // 错
//char c ="A"; // 错
//char c = A; // 错
//char c =65; // 对
char c4 = 'A';
// 以下编译通不过,因为'A'就是65
switch(c) {
case 'A' :
printf("1\n");
break;
case 65:
printf("2\n");
break;
}
printf("%d\n",'\n'); // '\n'的ASCII码值为10
printf("\\ \" \t"); // 输出"\" """
printf("%d\n",'a'-'A'); //
a与A的差为固定值32
return 0;
}
char upper(char c )
{
//如果是小写字母,就转换成大写字母
if(c>'a'&& c<'z')
{
return c - ('a'-'A');
}
else
{
return c ;
}
//差不多的写法
/*
if(c>'a'&&c<'z')
return c-('a'-'A');
return c;
*/
}
相关文章推荐
- 黑马程序员——零基础学习iOS开发——03 c语言基础语法:关键字、标示符、注释、数据结构、变量、变量内存分析、scanf函数
- 黑马程序员_iOS开发C语言基础之枚举类型和数据类型总结
- 黑马程序员——ios开发基础之C语言预处理命令与文件操作
- 黑马程序员——ios开发基础之C语言程序结构分类与函数
- 黑马程序员-IOS-C语言基础-函数及内存剖析
- 黑马程序员_iOS开发C语言基础之预处理命令
- 黑马程序员_iOS开发C语言基础之函数
- 黑马程序员_iOS开发C语言基础之运算符和流程控制
- 黑马程序员_IOS开发简介和C语言基础
- 黑马程序员_iOS开发C语言基础之指针
- 黑马程序员-iOS基础-C语言基础(四)内存剖析、数组、字符串
- 黑马程序员——零基础学习iOS开发——05 C语言:进制、内存储存细节、类型说明符、位运算、数组
- 黑马程序员_iOS开发C语言基础之关键字typedef、static、extern使用
- ioS开发之c语言基础-一维数组,字符数组
- 黑马程序员-----------C语言基础-----------iOS开发前奏
- 黑马程序员_iOS开发C语言基础之字符串
- 黑马程序员_iOS开发C语言基础之递归的使用
- 黑马程序员_iOS开发C语言基础之结构体
- 黑马程序员_iOS开发C语言基础之数组
- 黑马程序员_iOS开发C语言基础基本语法易错点