目录
1.进制转换(二进制,八进制,十进制,十六进制)
- 二进制转十进制 二进制数与十进制转换中每一位有着相应的权重,从右向左依次是2^0,2^1,2^2,2^3……以此类推,而二进制转十进制,只用将对应数字乘以相应权重,再相加即可,例如:二进制数1101———对应十进制为1*2^0+0*2^1+1*2^2+1*2^3=11; 二级制数111000——对应十进制数为0*2^0+0*2^1+0*2^2+1*2^3+1*2^4+1*2^5=56;
- 十进制转二进制 相反,十进制转换二进制采用相除的办法。例如十进制数125对应二进制数为1111101;
- 二进制转换为八进制 8进制的数字每⼀位是0~7的数字,各⾃写成2进制,最多有3个2进制位就⾜够了,⽐如7的⼆ 进制是111,所以在2进制转8进制数的时候,从2进制序列中右边低位开始向左每3个2进制位会换算⼀ 个8进制位,剩余不够3个2进制位的直接换算。 如:2进制的01101011,换成8进制:0153,0开头的数字,会被当做8进制。
- 二进制数转换为十六进制 16进制的数字每⼀位是0~9,a ~f 的数字,各⾃写成2进制,最多有4个2进制位就⾜够了, ⽐如 f 的⼆进制是1111,所以在2进制转16进制数的时候,从2进制序列中右边低位开始向左每4个2进 制位会换算⼀个16进制位,剩余不够4个⼆进制位的直接换算。 如:2进制的01101011,换成16进制:0x6b,16进制表⽰的时候前⾯加0x进制
2.原码,反码,补码
整数的2进制表示方法有三种,即原码、反码和补码
有符号整数的三种表示方法均有符号位和数值位两部分,2进制序列中,最高位的1位是被当做符号 位,剩余的都是数值位。
符号位都是用0表示“正”,用1表示“负”。
正整数的原、反、补码都相同。
负整数的三种表示方法各不相同。
原码:直接将数值按照正负数的形式翻译成⼆进制得到的就是原码。
反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。
补码:反码+1就得到补码。 反码得到原码也是可以使用:取反,+1的操作。
// 00000000000000000000000000001010 -- 10的原码(int型)
// 00000000000000000000000000001010 -- 10的反码
// 00000000000000000000000000001010 -- 10的补码
// 10000000000000000000000000000011 -- -3的原码(int型)
// 11111111111111111111111111111100 -- -3的反码
// 11111111111111111111111111111101 -- -3的补码
3. 操作符的分类
• 算术操作符: + 、- 、* 、/ 、%
#include<stdio.h>
int main()
{
int a,b,c;
scanf("%d %d",&a,&b);
c = a + b;//“+”两数相加
printf("%d\n", c);
c = a - b;//“-”两数相见
printf("%d\n", c);
c = a * b;//“*”两数相乘
printf("%d\n", c);
c = a / b;//“/”两数相除
printf("%d\n", c);
c = a % b;//“%”两数取余(数)
printf("%d\n", c);
return 0;
}
• 移位操作符: >> <<
位移操作数的操作符只能是整数
#include<stdio.h>
int main()
{
int a = 10,num1,num2;
//00000000000000000000000000001010 --10的原码
//00000000000000000000000000001010 --10的反码
//00000000000000000000000000001010 --10的补码
num1 = a << 1;
//00000000000000000000000000010100 --向左移动一位,左边删0,右边补0(这是10的补码左移动后的补码)
//00000000000000000000000000010100 --正数的原反补码均相同,所以该原码对应10进制数为20
num2 = a >> 1;
//00000000000000000000000000000101 --向右移动一位,右边删一位,左边补原该值符号位(这是10的补码右移动后的补码)
//00000000000000000000000000000101 --正数的原反补码均相同,所以该原码对应10进制数为5
printf("%d %d", num1,num2);
return 0;
• 位操作符: & | ^ ~
#include <stdio.h>
int main()
{
int num1 = -3;
//10000000000000000000000000000011 -- -3的原码
//11111111111111111111111111111100 -- -3的反码
//11111111111111111111111111111101 -- -3的补码
int num2 = 5;
//00000000000000000000000000000101 -- 5的原、反、补码
printf("%d\n", num1 & num2);//按位与,有0为0,两个1才为1
//11111111111111111111111111111101 -- -3的补码
//00000000000000000000000000000101 -- 5的补码
//00000000000000000000000000000101 -- &按位与后的补码结果,首位为0,正数,原反补码相同,十进制为5
printf("%d\n", num1 | num2);//按位或,有1为1,两个0才为0
//11111111111111111111111111111101 -- -3的补码
//00000000000000000000000000000101 -- 5的补码
//11111111111111111111111111111101 -- |按位或后的补码结果,首位为0,负数,补码取反+1得原码
//10000000000000000000000000000011 -- |按位或后的原码结果,为-3
printf("%d\n", num1 ^ num2);//按位异或,相同为00,不同为1
//11111111111111111111111111111101 -- -3的补码
//00000000000000000000000000000101 -- 5的补码
//11111111111111111111111111111000 -- ^按位异或后的补码结果,首位为1,负数,补码取反+1得原码
//10000000000000000000000000001000 -- ^按位异或后的原码结果,为-8
printf("%d\n", ~0);//按位取反,直接取反,0变1,1变0
//00000000000000000000000000000000 -- 0的原反补码
//11111111111111111111111111111111 -- ~按位取反后的补码结果,首位为1,负数,补码取反+1得原码
//10000000000000000000000000000001 -- ~按位取反后的原码结果,为-1
return 0;
}
• 赋值操作符: = 、+= 、 -= 、 *= 、 /= 、%= 、>= 、&= 、|= 、^=
• 单⽬操作符: !、++、--、&、*、+、-、~ 、sizeof、(类型)
• 关系操作符: > 、>= 、< 、<= 、 == 、 !=
• 逻辑操作符: && 、||
#include<stdio.h>
int main()
{
int num;
scanf("%d", &num);
if (num % 4 == 0 && num % 100 != 0 || num % 400 == 0)//&&逻辑与,||逻辑或
printf("num是闰年");
else
printf("num是平年");
return 0;
}
• 条件操作符: ? :
int a = 5;
int b = 10;
int max = (a > b) ? a : b; // 如果a大于b,则max等于a,否则等于b
//它的语法结构是 condition ? value_if_true : value_if_false。如果 condition 为真(非零),则返回 value_if_true;如果 condition 为假(零),则返回 value_if_false
• 逗号表达式: ,
// 代码1
int a = 1;
int b = 2;
int c = (a > b, a = b + 10, a, b = a + 1);//逗号表达式,从左到右依次计算,整个表达式的结果是最后⼀个表达式的结果。
c是多少?//c==13
//代码2
if (a = b + 1, c = a / 2, d > 0)
//代码3
a = get_val();
count_val(a);
while (a > 0)
{
//业务处理
a = get_val();
count_val(a);
}
如果使⽤逗号表达式,改写:
while (a = get_val(), count_val(a), a > 0)
{
//业务处理
}
• 下标引⽤: [ ]
int arr[10];//创建数组
arr[9] = 10;//实⽤下标引⽤操作符。
//[ ]的两个操作数是arr和9。
• 函数调⽤: ( )
include <stdio.h>
void test1()
{
printf("hehe\n");
}
void test2(const char *str)
{
printf("%s\n", str);
}
int main()
{
test1(); //这⾥的()就是作为函数调⽤操作符。
test2("hello bit.");//这⾥的()就是函数调⽤操作符。
return 0;
}