標籤:
//// 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; }
ios進位