1. 数据类型 按照数据在内存中所占的大小(32位机) 一般有如下划分int 整型 4个字节 char 字符型 1个字节 float 单精度浮点型 4个字节 double 双精度浮点型 8个字节 long 长整型 4个字节 sh
1. 数据类型
按照数据在内存中所占的大小(32位机) 一般有如下划分
int 整型 4个字节
char 字符型 1个字节
float 单精度浮点型 4个字节
double 双精度浮点型 8个字节
long 长整型 4个字节
short 短整型 2个字节
...
按照数据有无符号位的划分 有可以分为 :
signed int : 有符号整型
unsigned int : 无符号的整型
...
进制之间的转换:
十进制数 15 -》 十六进制数 ?
1111 0xf
十六进制的1位 对应二进制的4位
八进制的1位 对应二进制的3位
例:
10进制数 253 --》 16进制 ?
253 = 256 - 1 - 2
256: 1 0000 0000
255: 1111 1111
253: 1111 1101
十六进制:0xfd
//1 2 3 4 5 6 7 8 9 a b c d e f
十进制176换成 八进制 和 十六进制 ?
176 = 128(2^7) + 32(2^5) + 16(2^4)
176 : 10 110 000
十六进制: 0xB0
八进制: 260
整数在计算机中存储形式?
整数在计算机中以补码的形式存放。
正数的补码是其原码本身 原码:二进制
负数的补码是其绝对值的原码 取反 +1
例:
17的补码是多少?
17 = 16(2^4) + 1
00000000 00000000 00000000 00010001
-17的补码是多少?
绝对值17的原码: 00000000 00000000 00000000 00010001
取反 : 11111111 11111111 11111111 11101110
+1 : 11111111 11111111 11111111 11101111 --》 -17的补码
11111111 11111111 11111111 11101111 ?
-1:11111111 11111111 11111111 11101110
取反00000000 00000000 00000000 00010001 -17
2. 运算符与表达式
= : 赋值
== : “等于”
+ - * / % :
5/3 = 1
6.0/3 = 2.0
逻辑运算符:
&& :两者都为真 结果才为真
|| :只要有一个为真 结果就为真
! : 结果取反
在C语言中 什么代表真 什么代表假?
非0代表真 0代表假
printf("%d\n", 5&&-1); //1
printf("%d\n", 5&&0); //0
位运算符: 他的操作的对象是bit位。
& : 按位与
| :按位或
~ :按位取反
^ :异或 “求异” 不同为1 相同为0
<< :按位左移
>> :按位右移
例:
5 & 6 ?
位运算符计算前 先把操作的数都化成二进制
然后对相对应的bit位进行操作
5: 00000101
6: 00000110
————————————————
& 00000100 == 4
练习:
求: 5 | 6 7
~(5 | 17) -22
7 ^ 10 13
3 >> 1 1
1 << 4 16
~(5 | 17) -22
5: 00000000 00000000 00000000 00000101
17: 00000000 00000000 00000000 00010001
___________________________________________
| : 00000000 00000000 00000000 00010101
~ : 11111111 11111111 11111111 11101010
-1: 11111111 11111111 11111111 11101001
取反00000000 00000000 00000000 00010110 16 + 4 + 2 = 22 《==绝对值
自增和自减运算符:
++ :
int a = 1;
a++; 先用 后加
++a; 先加 后用
例:
int a = 1;
printf("%d\n",a++); 1
printf("%d\n",++a); 3
-- :
例:
int a = 1;
printf("%d\n",a--); 1
printf("%d\n",--a); -1
三目运算符:
格式: a ? b : c
如果a表达式为真 那么整个表达式的值就是b的值
如果a表达式为假 那么整个表达式的值就是c的值
printf("%d\n",1>2?3:4);
3. 假设现有有一个整型变量a 请你将a的第8个bit位取反 其他bit位不变 (位操作)
xxxxxxxx xxxxxxxx xxxxxxx0 xxxxxxxx
==>
xxxxxxxx xxxxxxxx xxxxxxx1 xxxxxxxx
任何数&上1 结果都是其本身
x = 1 x&1 = 1
x = 0 x&1 = 0
任何数|上0 结果都是其本身
x = 1 x|0 = 1
x = 0 x|0 = 0
任何数^上1 结果都是其本身取反
x = 1 x^1 = 0
x = 0 x^1 = 1
任何数^上0 结果都是其本身
x = 1 x^0 = 1
x = 0 x^0 = 0
xxxxxxxxxxxxxyxxxxxxxx a
^ 0000000000000100000000 2 ^ 8 (1<<8)
————————————————————————————————————
xxxxxxxxxxxxxkxxxxxxxx
3.三大结构
1. 顺序结构
在代码块中的代码都是按照从上到下的顺序执行。
{
xxx;
yyy;
zzz;
}
2. 选择/分支结构
if
else if
else
switch - case
3. 循环结构
while
for
0. 求所有的水仙花数
水仙花数: 他是一个三位数 满足个位的立方+十位的立方 +百位的立方 的和等于他本身的值的数
int i = 0;
for(i=100;i<1000;i++)
{
//个位
int gewei = i%10; // 123 123%10 = 3
//十位
int shiwei = i/10%10; // 123 123/10%10 = 2
//百位
int baiwei = i/100 ;
if( gewei * gewei *gewei + shiwei *shiwei*shiwei +baiwei*baiwei*baiwei == i)
{
printf("%d\n",i);
}
}
2.求100-1000之间满足各位数字之和是5的所有数。
int i=0;
for(i=100;i<1000;i++)
{
//个位
int gewei = i%10; // 123 123%10 = 3
//十位
int shiwei = i/10%10; // 123 123/10%10 = 2
//百位
int baiwei = i/100 ;
if(gewei + shiwei + baiwei == 5)
{
printf("%d\n",i);
}
}
《算经》中提出一个著名的“百钱买百鸡问题”,鸡翁一,值钱5,鸡母一,值钱三,鸡雏三,值钱一,
百元买百鸡,问翁,母,雏各几何?
// 5x + 3y + z/3 = 100;
// x + y + z = 100;
int x ; //鸡翁
int y ; //鸡母
int z ; //鸡雏
for(x=0; x<21 ;x++)
{
for(y=0;y<34;y++)
{
for(z=0;z<100;z+=3)
{
if(x+z+y == 100 && (5*x + 3*y + z/3 == 100 ) )
{
printf("x=%d , y=%d , z=%d\n",x,y,z);
}
}
}
}
【转自:韩国服务器 http://www.yidunidc.com 欢迎留下您的宝贵建议】