【C++系列】c语言基础 day04 操作符,八进制和十六进制
in C/C++ with 0 comment

【C++系列】c语言基础 day04 操作符,八进制和十六进制

in C/C++ with 0 comment

#八进制和十六进制

可以把二进制数字从右向左每三位分成一组,把每一组用一个0-7之间的数字替代,替代结果叫做数字的八进制表示方式。
0110 1010 01 101 010. 152(八进制)
可以直接在程序里使用八进制方式表示数字,这种数字必须以0开头

可以使用%o做占位符把数字的八进制写法显示在屏幕上

把二进制数字从右向左每四个数位分成一组,每组用一个字符替换得到的结果叫做数字的十六进制表示方式。(用a-f替换10-15之间的数字)
1100 1011。 cb(十六进制)
可以在程序中使用十六进制表示数字,这种数字必须以0x为开头
可以使用%x或%X占位符把数字的十六进制写法显示在屏幕上。
使用%x做占位符的时候显示结果里所有字母都是小写的。
使用%X做占位符的时候显示结果里所有字母都是大写的。
显示结果中不包含0x开头

/*
 * 八进制和十六进制演示
 * */
#include <stdio.h>
int main() {
    printf("%d    0%o\n", 0152, 0152);
    printf("%d   0x%x  0X%X\n", 0xcb, 0xcb, 0xcb);
    return 0;
}

#C语言中可使用的操作符

操作符用来描述对数字的处理规则,根据操作符所需要配合的数字个数不同把操作符分为单目操作符,双目操作符和三目操作符。
C语言中可以使用加减乘除(+,-,*,/)四则运算符号,如果参与除法运算的两个数字都是整数则计算结果只保留整数部分。
C语言里使用%进行取余操作。 赋值操作用=表示,它可以把一个数字记录到一个存储区里。
地址语句可以当作数字使用,这个数字就是赋值完成后左边存储区里的数字。可以在一条语句里使用多个赋值操作符,这个时候优先计算右边的赋值操作符,
C语言里绝大部分双目操作符可以和赋值操作符号结合成为符合赋值操作符。例如+=,%=等
符合赋值操作符要有左边的内容可以代表一个存储区,右边的内容必须能代表一个数字。
符合赋值操作符首先对两边的内容采用双目操作符进行计算然后把计算结果存储到左边的存储区里。
符合赋值操作符里双目操作符的优先级和赋值操作符的优先级一样低

自增操作符(++)和自减操作符(--)都是单目操作符。
这两个操作符都必须和存储区配合使用,它们可以把存储区的内容做加一或减一计算。
它们各有两种使用方法,一种是前操作(操作符写在存储区前面)另一种是后操作(操作符写在存储区后面)

自增自减表达式是可以当作数字使用的,前操作当数字使用时是修改后的数字,后操作当数字使用是修改前的数字。

不要在一条语句中对同一个变量多次进行自增或自减计算。

/*
 * 操作符演示
 * */
#include <stdio.h>
int main() {
    char ch = 0;
    int num = 0;
    num = ch = 300;
    printf("num是%d\n", num);
    num += 6;
    printf("num是%d\n", num);
    num *= 2 + 3;
    printf("num是%d\n", num);
    return 0;
}

自增自减操作符

/*
 * 自增,自减操作符演示
 * */
#include <stdio.h>
int num2 = 0;
int main() {
    int num = 10, num1 = 0;
    num++;
    printf("num是%d\n", num);
    ++num;
    printf("num是%d\n", num);
    num = 10;
    num1 = num++;
    printf("num是%d,num1是%d\n", num, num1);
    num1 = ++num;
    printf("num是%d,num1是%d\n", num, num1);
    num = 10;
    num1 = num++ + ++num;
    printf("num是%d,num1是%d\n", num, num1);
    num2 = 10;
    num1 = num2++ + ++num2;
    printf("num2是%d,num1是%d\n", num2, num1);
    return 0;
}

#逻辑操作符

逻辑操作符用来编写逻辑表达式
逻辑表达式的结果只能是布尔值

“!”。是一个单目逻辑操作符,他表示对一个布尔求反(真变假,假变真)
这个操作符使用的时候要写在一个布尔值的前面

双目逻辑操作符包括等于(==),不等于(!=),大于(>),小于(<),大于等于(>=)和小于等于(<=)
如果一个逻辑表达式里最多包含一个双目逻辑操作符则他在数学里的计算结果和在计算机里的结果一定是一样的,这种逻辑表达式叫做简单逻辑表达式。
C语言里的逻辑表达式必须拆分成多个简单逻辑表达式然后再合并。
可以使用与(&&)和或(||)把两个逻辑表达式合并成一个。
如果两个逻辑表达式里有一个的结果是真则用或(||)连接后的结果就是真
如果两个逻辑表达式里的结果是假,则用与(&&)连接后的结果就是假。

与(&&)和或(||)都具有短路特征(如果前一个逻辑表达式的结果可以决定整个逻辑表达式的结果就忽略后一个逻辑表达式。)

练习

男人身高减体重小于105算超重
女人身高减体重小于110算超重

gender(0代表女,1代表男)
height(身高)
weight(体重)
编写逻辑表达式,如果这个人超重则计算结果是真,否则计算结果是假。

(Gender && height - weight <105 超重 ||
Gender =0 && height - weight <110 超重

位操作符可以直接操作二进制数的内容。 ~是一个单目位操作符,它可以根据一个数字计算出另一个数字,这两个数字所有的二进制数位的内容都不一样(按位求反)。使用的时候这个操作符应该写在一个数字前面。

双目位操作符包括按位与(&),按位或(|)和按位异或(^ )
它们可以把两个数字对应数位的内容作计算

按位与(&)可以把两个数字对应数位的内容做与计算
只要一个数位的内容是0则与计算以后结果就是0
任何数位内容和0做按位与结果一定是0
任何数位内容和1作按位与结果保持不变

按位或(|)可以把两个数字对应数位的内容做或运算。
或计算的规则是任何数位内容是1则结果就是1
任何数位内容和0作按位或保持不变
任何数位内容和1作按位或结果一定是1

按位异或可以把两个数字对应数位的内容作异或运算
如何两个数位内容一样则异或结果是0,否则结果是1
任何数位内容和1作按位异或结果变为相反数。
任何数位内容和0作按位异或结果不变。

移位操作可以把一个数字的所有二进制数位内容统一向左或向右移动n个位置。

表示向右移位操作
<<表示向左移位操作

它们都是双目位运算符
移位操作符的左边是将要进行移位操作的数字,右边是移动的位数。
移位操作会把每个数位的内容放到另外一个数位里
向左移位的时候右边空出来的位置里一定填充0
0x8ffffff 1000 1111
0xe3ffffff 1110 0011
在符号类型数字右移的时候左边空出来的数位里一定填充符号位的内容。
程序中用十六进制数字直接表示的数字是无符号类型。
无符号数右移的时候左边空出来的用0填充。
一般情况下向左移动n位相当于乘以2的n次方,向右移动n位相当于除以2的n次方

所有位操作符不会修改现有存储区内容

#地址操作

&也可以作为单目操作符使用,这个时候它可以计算一个存储区的地址
使用的时候它应该写在一个存储区的前面
可以使用%p做占位符把地址数据显示在屏幕上
我们的计算机里所有地址数据都由32个二进制数位构成。

*也可以作为单目操作符使用,这个时候它可以根据一个地址找到对应的存储区。

#三目操作符

三目操作符可以两种不同的计算规则里选择一个进行计算。
三目操作符格式如下:
布尔值 ? 公式1 : 公式2
如果布尔值为真就用公式一计算,否则用公式二计算。
不要在问好后使用赋值操作符

练习

Boolean I = 0;
I = gender ? height - weight < 105 : height - weight <110;

编写程序从键盘得到一个0到127之间的整数,把它转换成二进制并把结果显示在屏幕上。
先显示左边的数位,后显示右边的数位。
Tips:可以按照按位与实现

/*
 * 操作符练习
 * */
#include <stdio.h>
int main() {
    int num = 0;
    unsigned char ch = 0x80;
    printf("请输入一个数字:");
    scanf("%d", &num);
    printf("转换结果是");
    printf("%d", (num & ch) != 0);
    ch >>= 1;
    printf("%d", (num & ch) != 0);
    ch >>= 1;
    printf("%d", (num & ch) != 0);
    ch >>= 1;
    printf("%d ", (num & ch) != 0);
    ch >>= 1;
    printf("%d", (num & ch) != 0);
    ch >>= 1;
    printf("%d", (num & ch) != 0);
    ch >>= 1;
    printf("%d", (num & ch) != 0);
    ch >>= 1;
    printf("%d\n", (num & ch) != 0);
    ch >>= 1;
    return 0;
}

结果:
请输入一个数字:4
转换结果是0000 0100

预习

1,类型转换
2,分支
3,for循环

题目

556B368A-6254-4D8B-866F-1A881607527C.png

程序

include<stdio.h>

int main(){

int i = 8;
printf("%d\n",++i);
printf("%d\n",--i);
printf("%d\n",i++);
printf("%d\n",i--);
printf("%d\n",-i++);
printf("%d\n",-i--);
printf("-------\n");
return 0;

}
~

Responses