C语言进制基本概念

进制:是一种计数的方式

常见的进制:十进制 二进制 八进制 十六进制 生活中都是十进制

二进制:逢二进1  书写方式以0b或者0B开头

八进制:逢八进1 书写形式以0开头  输出%o

十六进制:逢十六进1书写形式以0x开头  输出%x

结论:无论正数负数在内存中存储的都是补码

原码反码补码的概念

数据在计算机内部都是以补码的形式存储

数据分为有符号和无符号数据

无符号都正数,由十进制直接转换到二进制直接存储即可

正数的最高位是0,负数的最高位是1,对于正数:

原码 == 反码 == 补码

负数的首位为1,其源码后面的为也为10进制转换到的二进制数字,都是用补码的方式表示有符号数的

原码—>就是第一位表示符号,其余表示值

原码:[+1]0000 0001

原码:[-1]1000 0001

反码:正数的反码是其本身

负数的反码是在原码的基础上,符号位不变,其余各个位取反

原码:[+1]0000 0001 反码:0000 0001

原码:[-1]1000 0001 反码:1111 1110

补码:

正数的补码就是其本身

负数的补码就是在原有的基础上,符号位不变,其余各取反,最后+1(在反码的基础上+1)

原码:[+1]0000 0001 反码:0000 0001 补码:0000 0001
原码:[-1]1000 0001 反码:1111 1110 补码:1111 1111

机器可以只有加法而没有减法,根据运算法则减去一个正数等于加上一个负数(1-1 == 1+( 1+ -1

)

位于运算符

位于运算是按二进制进行的运算,语言??供了6个位操作运算符。这些运算符只能用于整型操作数,即只能用于带符号或无符号的 char,short,int与long类型。

位运算符与

&按位于

  • 只有对应的两个二进位均为1时,结果位才为1,否则为0
  • 口诀: 同1为1

9&5 = 1

1001
&0101
------

0001

规律

二进制中,与1相&就保持原位,与0相&就为0

应用场景

判断奇偶性:将变量a与1做位与运算,若结果是1,则 a是奇数;若结果是0,则 a是偶数

任何数和1进行&操作,得到这个数的最低位

  1001
& 0001
------------

0001

位运算符或

| 按位或

只要对应得二进位有一个为1时,结果都为1,否则为0

示例

9|5 = 13 1001 |0101 ------ 1101

位运算符异或

^按位异或

当对应的进位相异( 不相同)时,结果为1,否则为0

示例

9^5 = 12

1001
^0101
------
 1100

位运算符取反

各二进位进行取反(0变1,1变0)

多个整数相^的结果跟顺序无关.比如5^6^7= 5^7^6

因此得出结论:a^b^a = b;

示例

~9 =-10

9的原码:0000 0000 0000 0000 0000 1001
   反码:1111 1111 1111 1111 1111 0110

知道补码求原码:也是符号位不变,其他各位取反+1
1111 1111 1111 1111 1111 0110
取反
1000 0000 0000 0000 0000 1001
+1
1000 0000 0000 0000 0000 1010 // -10

左移运算符

把整数a的各二进位全部左移n位,高位丢弃,低位补0。左移n位其实就是乘以2的n次方

  • 由于左移是丢弃最高位,0补最低位,所以符号位也会被丢弃,左移出来的结果值可能会改变正负性

2<<1; //相当于 2 *= 2 // 4
2<<2; //相当于 2 *= 2^2; // 8

右移位运算符

把整数a的各二进位全部右移n位,保持符号位不变。右移n位其实就是除以2的n次方

    • 为正数时, 符号位为0,最高位补0
    • 为负数时,符号位为1,最高位是补0或是补1
    • 取决于编译系统的规定
    • 移出的位砍掉, 缺少的以为最高位是0就补0是1就补1(是在当前操作系统下)
  • 应用场景

    • 快速计算一个数除以2的n次方
    • 实现

          int len = sizeof(int)*8;
          int temp;
          for (int i=0; i<len; i++) {
              temp = num; //每次都在原数的基础上进行移位运算
              temp = temp>>(31-i); //每次移动的位数
              int t = temp&1; //取出最后一位
              if(i!=0&&i%4==0)printf(" "); printf("%d",t);
          }

变量的内存 分析

先分配字节地址大内存,然后分配字节小地值(内存寻址是由比后定义的大)

变量的首地址值是变量所占存储空间字节最小的那个地址

地位保存在低地址上,高位保存在高地址上

10的二进制: 0b00000000 00000000 00000000 00001010
            高字节←                       →低字节

字节和地址

内存中是字节为单位

一个字节只有8位,所表示的数据范围是非常有限的.因此,范围较大的数据就要占用多个字节,也就是说不同的数据占用的字节数是不一样的

  • 一个变量所占用的存储空间,不仅跟变量类型有关,而且还跟编译器环境有关系。同一种类型的变量,在不同编译器环境下所占用的存储空间又是不一样的

  • 变量存储单元的第一个字节的地址就是该变量的地址
  • 任何变量在内存中都是以二进制的形式存储。一个负数的二进制形式,其实就是对它的正数的二进制形式进行取反后再+1。(取反的意思就是0变1、1变0)

char类型数据的原理

char a=‘a‘ ----->取出‘a‘的ASCII码值,97,然后转换2进制,存储在一个字节中

1把一个字符赋值给一个char类型变量,那么系统首先查这个字符所对应的ASCII码,然后把这个ASCII值放到变量中

1根据变量中存储的ASCII值,去查ASCII表中对应字符,然后把这个字符打印控制台上,整形和 字符型可以互相转换。

  • 输入一个小写字母,要求转换成大写输出
  • 分析
a ....z 对应ASCII表中的值97...122
A 65 a 97 差了32

  • 实现

char toLower(char c){
    char ch;
    if (c>=‘a‘&&c<=‘z‘) {
        ch= c-32;
    }
    return ch;
}

类型说明符

  • C语言提供了以下4种说明符,4个都属于关键字:

    • short 短型 等价于 short int
    • long 长型 等价于 long int
    • signed 有符号型
    • unsigned 无符号型
  • 这些说明符一般就是用来修饰int类型的,所以在使用时可以省略int
  • 在64bit编译器环境下,int占用4个字节(32bit),取值范围是-2^31~2^31-1;
  • short占用2个字节(16bit),取值范围是-2^15~2^15-1;
  • long占用8个字节(64bit),取值范围是-2^63~2^63-1
时间: 2024-12-31 10:07:22

C语言进制基本概念的相关文章

C语言---进制

1. 何为进制 进位机制,逢几进一.数值某一位置上的数在运算时是逢几进一. 生活中的进制:十进制.十二进制(12个月是1年).六十进制(60秒是1分钟) 计算机编程中的进制:二进制.八进制.十六进制.十进制 2. 进制的作用 利用有限的数字表示所有数值. 以十进制为例:使用0~9的数字表示所有数值. 例如: (1)数值9:使用数字9表示 (2)数值10:使用数字1和0表示 3.进制的规则 (1)n进制使用 0~n-1之间的数字表示所有数值 1)二进制 0 1 2)八进制 0 1 2 3 4 5

C语言进制

一  原码.反码.补码 计算机存储的数为补码 数分为有符号(正.负)和无符号(全是正) 原码 正数:数转换为2进制,最高位如果是0,则是整数 负数:数转换为2进制,最高位如果是1,则是负数 反码 正数:整数的反码还是它的原码 负数:除符号位不变,其它各位,逐位取反 补码 正数:整数的补码还是它的原码 负数:反码+1 2)为什么要使用补码? 补码主要是用于设计计算机的减法 3)已知负数的原码求补码 1)反码:除符号位之外,取反 2)补码:反码+1 4)已知补码求原码: 补码取反加1为原码 二:位运

【C语言疯狂讲义】(七)C语言进制转换

1.计算机中的进制 2进制:逢二进1      0  1 8进制:逢八进1      0  1   2  3  4  5  6  7 10进制:逢十进1  默认的进制  0 - 9 16进制:逢十六进1   0 - 9  A B C D E F      (内存的地址格式) 2.进制的转换问题 三个要素: 数位(0-7). 基数(每一位能取值的个数). 位权(数码*基数^数位).    101 = 1*2^0+0*2^1+1*2^2 数码(每一位设置) 转换:有得时候转换为人能识别的数制,要操作

c语言进制转化

#include <stdio.h> // 进制转化 int main(void) { int i1 = 12; int i2 = 88; int i3 = 0x32C; printf("八进制输出i1 = %o\n", i1); // 14 printf("十六进制输出i2 = %x\n", i2); // 58 printf("十六进制输出i3 = %x\n", i3); // 32c printf("十进制输出i3 =

09-C语言进制、内存分析

一. 进制 1. 什么是进制 l 是一种计数的方式,数值的表示形式 数一下方块的个数 汉字:十一   十进制:11  二进制:1011  八进制:13 l 多种进制:十进制.二进制.八进制.十六进制.也就是说,同一个整数,我们至少有4种表示方式 l 软件开发,肯定要了解这个 2. 二进制 1> 特点:只有0和1,逢2进1 2> 书写格式:0b或者0b开头 3> 使用场合:二进制指令\二进制文件,变量在内存中就是二进制存储 4> 二进制和十进制的互相转换 5> n为二进制位所能

java基础:进制的概念以及图解

进制: 是一种进位的方式.X进制,表示逢X进1. 计算机的电子元件的状态: 开,关 那么,我们表达数据的时候,也是按照开,关的状态来表示的 如果我们表达数据仅仅用这两种状态,那么能够表达的数据是比较少的, 而我们常见的数据:字母,数字,标点符号,类型就很多了 为了能够表示更多的数据,国际化标准组织就规定,:用8个这样的信号来表示 一个数据,这样的数据的单位叫:字节. 我们用1 0 分表来表示开和关 但是,使用二进制表达数据的表现形式太长了,所以这个时候我们就要进行简化: 把二进制的数据,从右开始

c语言:进制和位运算

一.进制 十进制转n进制: 连除倒取余. 以 10 为例,不同进制的表示方法: 十进制: 10; 二进制: 0b1010; 八进制: 010; 十六进制: 0x10; int a = 100; printf("%o",a); /* 如何输出进制数: %d ------ 十进制 %o  ------ 八进制 %0x ----- 十六进制 */ /* 位运算符:按位与 &, 按位或 |, 按位非 ~, 按位异或 ^, 左移 <<, 右移 >> 按位与 &am

黑马程序员---C基础6【#include指令】【模块化编程】【计算机的进制】【原码、反码、补码】【位运算符】

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- [#include指令] 1.文件包含命令的格式: 1)#include “”双引号是包含用户自己书写定义的文件(可以是头文件,也可以是普通的文件)#include是预处理指令,不是一个语句,不需要加封号 2)#include<>   包含一个系统(编译器自带)的头文件 2.文件包含的实质: 把指定文件内容插入该命令行位置取代该命令行, include不一定非要写在第一行: 3.includ

详解2进制,10进制,16进制,8进制,36进制

本篇介绍C/C++语言中的进制的概念,主要介绍2进制.10进制.16进制,这三种是编程时必须掌握的也是最经常使用的.另外,介绍8进制和36进制,当中 36进制在实际project项目中会遇到. (本文选自<C/C++学习指南>.邵发.附录"2进制,10进制,16进制") 讲2进制.10进制.16进制的视频教程,点击观看 权利声明:作者拥有本书的所有权利. 作者授权不论什么人都能够自由转载本站点公布的内容,但转载时必须遵守下面限制: ①转载时必须全文转载.不得有不论什么改动,