黑马程序员_iOS开发C语言基础之二进制内存存储解析与字符操作
来源:互联网 发布:c语言实验室 编辑:程序博客网 时间:2024/05/24 22:45
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;
}
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开发C语言基础之二进制内存存储解析与字符操作
- 黑马程序员_iOS开发C语言基础之函数
- 黑马程序员_iOS开发C语言基础之数组
- 黑马程序员_iOS开发C语言基础之字符串
- 黑马程序员_iOS开发C语言基础之指针
- 黑马程序员_iOS开发C语言基础之结构体
- 黑马程序员_iOS开发C语言基础之预处理命令
- 黑马程序员_iOS开发C语言基础基本语法易错点
- 黑马程序员_IOS开发简介和C语言基础
- 黑马程序员_iOS开发C语言基础之运算符和流程控制
- 黑马程序员_iOS开发C语言基础之枚举类型和数据类型总结
- 黑马程序员_iOS开发C语言基础之关键字typedef、static、extern使用
- 黑马程序员_iOS开发C语言基础之递归的使用
- 黑马程序员——ios开发基础之C语言预处理命令与文件操作
- 黑马程序员_iOS开发之Foundation框架
- 黑马程序员——ios开发基础之C语言之进制转换、位运算与内存管理
- 黑马程序员_ios基础总结10_内存管理
- 黑马程序员_ios基础入门学习_C语言_day1
- C++函数指针实例详解(篇二)
- “此帐户并未得到从这个工作站登录的授权”问题
- iOS8注册通知 push、notification
- 猜数字游戏
- gd_t和bd_t 以及 *gd asm ("r8")
- 黑马程序员_iOS开发C语言基础之二进制内存存储解析与字符操作
- 第二周周工作总结及计划表
- 【Android面试】Assets文件夹和/res/raw
- 计算物体密度
- C++函数指针实例详解(篇三)
- 排序算法-整理归档
- 第一章数据结构(思维导图)
- Linux下(网络流量分析)sar工具
- 深入理解递归函数的调用过程