// // main.m // LesssonScale //// 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的取值范围和unsigned char的取值范围的位数,如char和unsigned char都是8位,char型最高位是符号位,1代表为负数,所以为-2^7-1~~+2^7-1 即-128~+1 27 ,而unsigned char为2^8-1=256 即0~255
无符号: 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; }
时间: 2024-10-06 16:37:12