C语言进制

一  原码、反码、补码

计算机存储的数为补码

数分为有符号(正、负)和无符号(全是正)

原码

正数:数转换为2进制,最高位如果是0,则是整数

负数:数转换为2进制,最高位如果是1,则是负数

反码

正数:整数的反码还是它的原码

负数:除符号位不变,其它各位,逐位取反

补码

正数:整数的补码还是它的原码

负数:反码+1

2)为什么要使用补码?

补码主要是用于设计计算机的减法

3)已知负数的原码求补码

1)反码:除符号位之外,取反

2)补码:反码+1

4)已知补码求原码:

补码取反加1为原码

二:位运算:

一个数的二进制机器码之间的运算

C语言中的位运算符介绍:

是一个双目运算,需要有两个操作数

1)&  按位与 (比较两个数对应的数码,如果都为1,则结果为1)

口诀:同1为1

2)|  按位或(比较两个数对应的数码,如果有一个为1,则结果为1)

口诀:有1为1

3)^  按位异或(比较两个数对应的数码,如果两个码相同则为0,不同则结果为1)

口诀:相同为0,不同为1

4)~  按位取反(单目运算,数码逐位取反)

口诀:0变1,1变0

5)>> 按位右移

表示所有的二进制位,整体右移n位

注意:

1)数值得变化:每向右移动1位相当于除以2,保留整数部分

2)右移的时候,高位补符号位,低位直接舍弃

3)向右移动的时候,不会改变一个数的正负性

6)<< 按位左移

表示:所有的二进制位,都向左移动

左移:

1)左移可以让一个数变大

左移1次相当于*2

2)左移可能会改变一个数的正负性

3)高位舍弃,低位补0

技巧:

1)任何数和1进行按位与(&) 的到这个数的低位

三:变量的存储:

查看变量的地址使用 %p

1)内存是由若干个1个字节的存储单元组成

每个单元都有一个唯一的地址

2)内存存储数据是从高地址向地地址分配的

数据有高位和地位

int a =10;

00000000 00000000 00000001 00001010

高                                低

一个整数的各个字节存放的顺序:地位存放低地址  高位存放高地址

3)变量在内存中最小的那个地址,是变量的首地址

四: 变量的修饰符:

1)改变变量的存储空间

short   2个字节   -2^15 ~ 2^15-1;

int     4

long    8

long long 8

2)改变变量的符号

signed   有符号数(默认的时有符号的)

unsigned 无符号数

五://注意:char型的常量和变量存储方式是有差别的

char c =‘a‘;     //97     1个字节 -128,127

int size = sizeof(c);     //1

//在C语言中char的常量会被当做整形数据存储

size = sizeof(‘a‘);

printf("%d\n",size);

//1、存储的原理,取出字符对应的ascii码值,转换成2进制,存储到一个字节中

char ch=‘A‘;  //65     01000001

//以字符型的形式取出来:内存存的是65,到ascii码表中查找ascii码值等于65的字符   找到这个字符取出来

printf("%c\n",ch);

时间: 2024-10-10 13:30:43

C语言进制的相关文章

C语言进制基本概念

进制:是一种计数的方式 常见的进制:十进制 二进制 八进制 十六进制 生活中都是十进制 二进制:逢二进1  书写方式以0b或者0B开头 八进制:逢八进1 书写形式以0开头  输出%o 十六进制:逢十六进1书写形式以0x开头  输出%x 结论:无论正数负数在内存中存储的都是补码 原码反码补码的概念 数据在计算机内部都是以补码的形式存储 数据分为有符号和无符号数据 无符号都正数,由十进制直接转换到二进制直接存储即可 正数的最高位是0,负数的最高位是1,对于正数: 原码 == 反码 == 补码 负数的

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语言疯狂讲义】(七)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为二进制位所能

c语言:进制和位运算

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

C语言之进制

进制 一种计数的方式.侧重点在于计数的时候是逢多少进一. 1)      C语言可以识别的进制 二进制 每一位. 0 0 1 0 0 1 1 0 1 0 1 0 0 1 0 1 1 0 在C语言中,写一个二进制的数的方式就是在前面加一个 0b或者0B的前缀,二进制每一位是0或者1,逢2进1; 2. 八进制 每一位. 0 1 2 3 4 5 6 7 10 11 在C语言中,写一个八进制的数的方式就是在前面加一个 0的前缀,逢8进1; %o    将整型变量中得数据以八进制的形式输出 3. 十进制

C语言博客(6)编程基础之进制之间的转换

在本人的C语言博客的内容中,前面两篇随笔对二进制.八进制和十六进制进行了说明,接下来讲一下不同进制之间的数字是如何转换的,这在编程中经常会用到,尤其是C语言. 其他进制向十进制转换 在C语言学习中,二进制.八进制和十六进制向十进制转换都是非常容易的,就是"按权相加". 所谓"权",也即"位权".例如,十进制第1位的位权为100=1,第2位的位权为101=10,第3位的位权为102=100:而二进制第1位的位权为20=1,第2位的位权为21=2,第

c语言将2进制数转化为10进制数(栈的初始化,进栈,出栈)

1 //c语言描述 将2进制转化为10进制 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <math.h> 5 #define STACK_INIT_SIZE 20 6 #define //栈满后再分配 7 8 typedef char ElemType; 9 typedef struct 10 { 11 ElemType *base; //栈底 12 ElemType *top; //栈底 13 int s