首先求空间长度sizeof().
#include<stdio.h>
//程序=算法+数据
//运算符:
int main()
{
//调用函数 函数名()
//定义变量
//1求空间长度
int a=100;
short ilen=sizeof a;
//引用变量:变量的内容
printf("%d\n",ilen);
}
赋值运算.
#include<stdio.h>
int main()
{
//2赋值运算符 左值=右值 注:左值必须是变量
//signed short a;
//a=65536; //溢出
//不同类型转换
/*
short a=257;//00000001 00000001
char b=a;//将整型赋值给字符(低字符赋值)
float c=3.14;
a=c;
printf("%d\n",a);
//浮点型=整型
c=125;
printf("%f\n",c);
}
算术运算.
#include<stdio.h>
int main()
{
//算术运算符:
int a=200;
int b=2;
//+ *
printf("%d\n",a+b*2);
// %
//printf("%d\n",2.1%2); //error:%只能对整型
// /
printf("%f\n",5.03);
char c=97;
char d=200;
// short result=a+c; //char->int
float result1=a+3.14;
printf("%f %d\n",result1,sizeof(a+3.14));
}
算法:时间度,空间度.
#include<stdio.h>
int main()
{
//算法:1时间度 2空间度
//int temp;
int a=1;
int b=2;
//temp=a;
//a=b;
//b=temp;
//
a=a+b;
b=a-b;
a=a-b;
printf("%d %d\n",a,b);
}
按位右移 >> .
2的二进制是 0010 , 右移一位为 0001 , 故len=1;
#include<stdio.h>
{
//右移 >>
short a=2;
short len=a>>1;
printf("a=%d len=%d\n",a,len);
}
按位左移 << .
1的二进制是 0001 , 左移一位为 0010 , 故而len=2;
#include<stdio.h>
int main()
{
short c=1;
//左移 <<
len=c<<2;
printf("c=%d len=%d\n",c,len);
}
按位与 & .
#include<stdio.h>
int main()
{
// & 一一得1 一0得0 00得0
short i=7;
short j=2;
//初始化部分bit位值,或者除出子网数
len=i&j;
printf("i=%d j=%d len=%d\n",i,j,len);
//4段点分十进制 192.168.8.59 【0-255】.【0-255】.[0,255].[0,255]
// char char char char=int
//ip=网络号+主机号
// 192.168.8.59
unsigned int ip1=0xC0A8083A; //[01][10][11] [11]
// 11 11 11 00
// 01 10 11 00
//取网络号 192 C 【网络号】【网络号】【网络号】.主机
unsigned int mask1=0xFFFFFF00; //11111111 11111111 11111111 0000000
unsigned int result=0;
result=ip1&mask1;
printf("len=%x\n",result);//0xc0A80800--->192.168.8
//18.124.8.26
}
按位 或 | .
#include<stdio.h>
int main()
{
//按位或 | (一1得1) 1|1=1 1|0=1 0|0=0
short a=3; //0011
short b=12;
short result=a|b; // 0011
printf("%d\n",result); //|1100
//-------
// 1111
}
#include<stdio.h>
int main()
{
short a=45978; // 101 100111 0011010
unsigned short result=(a&0xe07f)|0x1580; //&111 000000 1111111
printf("%d\n",result); //
// 101 000000 0011010
//|000 101011 0000000
}
输出: 46490
按位取反,按位异或.#include<stdio.h>
int main()
{
//按位取反 ~a (单目运算)
//0->1 1->0
unsigned short i=0xfff5; //2Byte=16bit 1111 1111 1111 0101
unsigned short j=~i; // 0000 0000 0000 1010
printf("%d\n",j);
//按位异或 ^ 两位相异则为1 1^1=0 1^0=1 0^1=1
unsigned short a=10; // 1010
unsigned short b=5; // 0101
unsigned short result=a^b; // 1111
printf("%d\n",result);
}
习题:使用位运算执行的练习题:
1、int a=1 ,int b=2交换a,b的值
a=a+b;
b=a-b;
a=a-b;
第一种位方法:
#include<stdio.h>
int main()
{
int a = 1;
int b = 2;
a = a^b;
b = a^b;
a = b^a;
printf("%d %d\n",a,b);
}
第二种位方法:
int a=1000;
int b=2000;
int c = ~a;
int d = ~b;
b = ~c;
a = ~d;
printf("%d %d\n",a,b);
习题:short a=45978;请将第8位至13位修改为110101,其他位保持不变。
#include<stdio.h>
int main()
{
unsigned short a = 45978;
unsigned short b = 3;
unsigned short len = b<<9;
unsigned short result = a^len;
printf("%d\n",result);
}
习题:坐标点 short[高x,低y]
完成:1、将x,y的值分别存储到short point中[【x】【y】]。
2、将x,y的值分别出从point中取出。
#include<stdio.h>
int main()
{
unsigned short x =10;
unsigned short y =5;
int point =0; //【高x】【低y】
point =(unsigned short)y; //隐式类型转换
point =point | x<<16; //高位自动补0
printf("%x\n",point);
//取x,y的值
y=point&0xff;
x=(short)((point>>16)&0xff);
printf("%d %d\n",x,y);
return 0;
}
习题:通过三目运算符求: int a=1,b=2,c=0;中的最大值。
#include<stdio.h>
int main()
{
int a=12,b=8,c=20;
int d = (a>b?a:b);
int max = d>c?d:c;
printf("%d\n",max);
}
习题:循环移位 00110011 >> 2 ==11001100
#include<stdio.h>
int main(){
while(1){
unsigned char a = 51;
unsigned char b = 204;
int i = 0;
for(i=0;i<1;i++){
unsigned char c = a>>1;
unsigned char d = b<<1;
unsigned char e = c|d;
printf("%d\n",e);
}
unsigned char f = 153;
unsigned char g = 102;
int j = 0;
for(j=0;j<1;j++){
unsigned char h = f>>1;
unsigned char k = g<<1;
unsigned char l = h|k;
printf("%d\n",l);
}
int z = 0;
for(z=0;z<1;z++){
unsigned char m = b>>1;
unsigned char n = a<<1;
unsigned char o = m|n;
printf("%d\n",o);
}
int y = 0;
for(y=0;y<1;y++){
unsigned char p = g>>1;
unsigned char q = f<<1;
unsigned char r = p|q;
printf("%d\n",r);
}
}