//
// main.m
// LesssonScale
//
// Created by laouhn on 15/7/23.
// Copyright (c) 2015年 池海涛. All rights reserved.
//
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
/**
* 以10为例,不同进制的表示方法
十进制: 10
二进制:0b10;
八进制:010
十六进制:1x10;
int a = 0b100;
printf("%0x\n",a);
*/
/**
* 如何输出进制数:
%d ------十进制
%o ------八进制
%0x ------十六进制
*/
/**
* 位运算符 :按位 &,按位或 |,按位非 ~,按位异或 ^,左移<<,右移>>
按位与 & :同1为1,否则为0,经常用于对某一位清零
int a = 5 & 7;
5--0101
7--0111
=0101=5
printf("a = %d\n", a);
按位或 | : 同0为0,否则为1.经常用于保留某一位.
int a = 5 | 7;
5--0101
7--0111
=0111
printf("a = %d\n", a);
按位异或 ^相同为0,不同为1.
int a = 5 ^ 7;
5--0101
7--0111
=0010 = 2
printf("a = %d\n", a);
按位非 ~;
char b = ~4; //4--0000 0100, ~4=1111 1011 -1 ->1111 1010 ->1000 0101 =-5
printf("b = %d\n", b);
如果是一个有符号位的数,这最高位代表符号位,1 代表 负数, 0 代表正数
数据在内存中存储时,是以补码的形式存储的,正数的补码是正数的本身,负数的补码是
绝对值 取反 加1.
数据类型的取值范围:
无符号:
char 0-----255 (2的8次方减1)
short 0-----2的16 - 1;
int 0-----2的32 - 1;
有符号:
char -2的7次方 --- 2的7次方 - 1
short -2的15次方 --- 2的15次方 - 1
int -2的31次方 --- 2的31次方 - 1
左移 <<
unsigned char d = 1;
printf("左移后的结果%d\n", d << 4 );
右移 >>
unsigned char e = 255;
printf("右移后的结果%d\n", e >> 1);
//将100 高四位,低四位互换
unsigned char number = 0b01100100;
//1.先将 number 左移 4位
unsigned char left = number << 4;
//2.再将 number 右移 4位
unsigned char right = number >> 4;
//3.按位或
unsigned char result = left | right;
printf("result = %d\n", result);
将 10010010 奇偶位互换
unsigned char num = 0b10010010;
//清零操作使用 按位&, 保留的数位为1 ,清0 数的位为 0
//1.将奇数位变成偶数位,左移一位
unsigned char life = num << 1;
//2.保留偶数位, 奇数位清0
unsigned char clearJI = life & 0b10101010;
//3.将偶数位变奇数位, 右移1位
unsigned char rightNew = num >> 1;
//4.保留奇数位,偶数位清0
unsigned char clearOU = rightNew & 0b01010101;
//5.按位或 |
unsigned char resultNew = clearJI | clearOU;
printf("resultNew = %d \n", resultNew);
栈区内存分配原则:由高到底分配,有低到高存取.
int a = 10;
printf("%p\n",&a);
int b = 10;
printf("%p\n",&b);
//数组名代表数组的首地址,也就是数组的第一个元素的地址,是一个常量地址
int a[4] = {9, 5, 2, 7};
printf("%p\n",&a[0]);
printf("%p\n",&a[1]);
printf("%p\n",&a[2]);
printf("%p\n",&a[3]);
printf("%p\n",a);
*/
/**
* a=1010
b=1100
a=0110
b=1010
*/
//交换两个变量
int a=10,b=12; //a=1010^b=1100;
a=a^b; //a=0110 //找到a和b中不相同的位
b=a^b; //b=1010 //原b和ab不相同异或 -> a =1010
a=a^b; //a=1100 //
printf("a = %d\nb = %d", a, b);
return 0;
}
// // main.m // LesssonScale // // Created by laouhn on 15/7/23. // Copyright (c) 2015年 池海涛. All rights reserved. // #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { /** * 以10为例,不同进制的表示方法 十进制: 10 二进制:0b10; 八进制:010 十六进制:1x10; int a = 0b100; printf("%0x\n",a); */ /** * 如何输出进制数: %d ------十进制 %o ------八进制 %0x ------十六进制 */ /** * 位运算符 :按位 &,按位或 |,按位非 ~,按位异或 ^,左移<<,右移>> 按位与 & :同1为1,否则为0,经常用于对某一位清零 int a = 5 & 7; 5--0101 7--0111 =0101=5 printf("a = %d\n", a); 按位或 | : 同0为0,否则为1.经常用于保留某一位. int a = 5 | 7; 5--0101 7--0111 =0111 printf("a = %d\n", a); 按位异或 ^相同为0,不同为1. int a = 5 ^ 7; 5--0101 7--0111 =0010 = 2 printf("a = %d\n", a); 按位非 ~; char b = ~4; //4--0000 0100, ~4=1111 1011 -1 ->1111 1010 ->1000 0101 =-5 printf("b = %d\n", b); 如果是一个有符号位的数,这最高位代表符号位,1 代表 负数, 0 代表正数 数据在内存中存储时,是以补码的形式存储的,正数的补码是正数的本身,负数的补码是 绝对值 取反 加1. 数据类型的取值范围: 无符号: char 0-----255 (2的8次方减1) short 0-----2的16 - 1; int 0-----2的32 - 1; 有符号: char -2的7次方 --- 2的7次方 - 1 short -2的15次方 --- 2的15次方 - 1 int -2的31次方 --- 2的31次方 - 1 左移 << unsigned char d = 1; printf("左移后的结果%d\n", d << 4 ); 右移 >> unsigned char e = 255; printf("右移后的结果%d\n", e >> 1); //将100 高四位,低四位互换 unsigned char number = 0b01100100; //1.先将 number 左移 4位 unsigned char left = number << 4; //2.再将 number 右移 4位 unsigned char right = number >> 4; //3.按位或 unsigned char result = left | right; printf("result = %d\n", result); 将 10010010 奇偶位互换 unsigned char num = 0b10010010; //清零操作使用 按位&, 保留的数位为1 ,清0 数的位为 0 //1.将奇数位变成偶数位,左移一位 unsigned char life = num << 1; //2.保留偶数位, 奇数位清0 unsigned char clearJI = life & 0b10101010; //3.将偶数位变奇数位, 右移1位 unsigned char rightNew = num >> 1; //4.保留奇数位,偶数位清0 unsigned char clearOU = rightNew & 0b01010101; //5.按位或 | unsigned char resultNew = clearJI | clearOU; printf("resultNew = %d \n", resultNew); 栈区内存分配原则:由高到底分配,有低到高存取. int a = 10; printf("%p\n",&a); int b = 10; printf("%p\n",&b); //数组名代表数组的首地址,也就是数组的第一个元素的地址,是一个常量地址 int a[4] = {9, 5, 2, 7}; printf("%p\n",&a[0]); printf("%p\n",&a[1]); printf("%p\n",&a[2]); printf("%p\n",&a[3]); printf("%p\n",a); */ /** * a=1010 b=1100 a=0110 b=1010 */ //交换两个变量 int a=10,b=12; //a=1010^b=1100; a=a^b; //a=0110 //找到a和b中不相同的位 b=a^b; //b=1010 //原b和ab不相同异或 -> a =1010 a=a^b; //a=1100 // printf("a = %d\nb = %d", a, b); return 0; }