c语言:进制和位运算

一.进制

十进制转n进制: 连除倒取余.

以 10 为例,不同进制的表示方法:

十进制: 10;

二进制: 0b1010;

八进制: 010;

十六进制: 0x10;

int a = 100;

printf("%o",a);

/*

如何输出进制数:

%d ------ 十进制

%o  ------ 八进制

%0x ----- 十六进制

*/

/*

位运算符:按位与 &, 按位或 |, 按位非 ~, 按位异或 ^, 左移 <<, 右移 >>

按位与 & : 同1 为 1,否则为 0,经常用于对某一位清零.

按位或 | : 同0 为 0,否则为1.经常用于保留某一位,

按位非 ~ : 如果是一个有符号的数,则最高位代表符号位,1 代表负数, 0 代表正数,

数据在内存中存储时,是以补码的形式存储的,正数的补码是本身,负数的补码是 绝对值 取反 加 1 .

按位异或 ^ : 相同为 0,不同为 1 ;

*/

左移 << :

unsigned char d = 1;

printf("%d",d << 4);

右移 >>

unsigned char a = 255;

printf("%d",a >> 1);

unsigned char number = 0b01100100;

unsigned char left = number << 4;

unsigned char right = number >> 4;

unsigned char result = left | right;

printf("%d",result);

/*

//将 10010010 奇偶位互换

unsigned char num = 0b10010010;

//清零操作使用 按位&, 保留的位数为 1 ,清 0 数位为 0 ;

//1.将奇数位变偶数位,左移一位

unsigned char left = num << 1;

//2.保留偶数位,奇数位清 0

unsigned char clearJi = left & 10101010;

//3.将偶数位变奇数位,右移一位

unsigned char right = num >> 1;

//4.保留奇数位偶数位清0

unsigned char clearOu = right & 01010101;

//5.最后按位或 |

unsigned char result = clearJi | clearOu;

printf("%d",result);

*/

/*

数据类型的取值范围:

无符号: char 类型  0 -- 255 (2 的8次方 - 1);

short     0 -- 2的16次方 - 1;

int       0 -- 2的32次方 - 1;

有符号: char    -2 的 7次方 -- 2 的7次方 - 1;

short   -2 的15次方 -- 2 的15次方 - 1;

int     -2 的31次方 -- 2 的31次方 - 1;

*/

char b = ~4;

int a = 5 ^ 7;

printf("%d",b);

//栈区内存分配原则: 由高到低分配, 由低到高存取.

int a = -5;

printf("%p\n",&a);

int b = 10;

printf("%p\n",&b);

//数组名代表数组的首地址,也就是数组的第一个元素地址,是一个常量地址

int a[4] = {1, 2, 3, 4};

printf("%d\n", &a[0]);

printf("%p\n", &a[1]);

printf("%p\n", &a[2]);

printf("%p\n", &a[3]);

printf("%p\n", &a);

//交换两个数的值 不借助第三方变量

int a = 20;//1001

int b = 36;//0101

printf("交换前 a = %d,b = %d\n",a, b);

a = a ^ b;//1100

b = b ^ a;//1001

a = a ^ b;//0101

printf("交换后 a = %d,b = %d\n",a, b);

时间: 2024-10-05 13:36:11

c语言:进制和位运算的相关文章

16进制转化为2进制 【位运算】

#include <stdio.h> int  main() {    int i,a; while (~scanf("%x", &a)){ for(i=15;i>=0;i--) printf("%1d", a&1<<i?1:0);  //注意优先级,先移位<<,结果再与a按位与 printf("\n"); }return 0; } 16进制转化为2进制 [位运算]

进制与位运算

目录 进制与位运算 二进制,八进制,十六进制和转换 计算机中数的表示 C++的位运算 进制与位运算 二进制,八进制,十六进制和转换 二进制:由0和1组成,"逢二进一". 八进制:由0,1,2,3,4,5,6,7组成,"逢八进一". C/C++中,在数字前加上前缀"0"表示八进制. 十六进制:由0,1,2,3,4,5,6,7,8,9,A(10),B(11),C(12),D(13),E(14),F(15)组成,"逢十六进一". C

进制、位运算笔记

进制 位运算 进制介绍 一种计数的方式,数值的表示形式. 常见的进制有:二进制.十进制.八进制和十六进制. 二进制: 0和1,C语言中表示0b开头或者0B开头. 八进制: 0,1,2,3,4,5,6,7 C语言中以0开头的数字,例如045 十进制: 自然数 十六进制: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F C语言中以0x或者0X开头的数字 进制之间的转换: 其他进制转换成十进制的三要素: 1. 数位:数码在一个数中所处的位置. 一个序列,从右往左数位依次是0,1,2,3

javascript中的类型转换(进制转换|位运算)

1:parseInt(string) : 这个函数的功能是从string的开头开始解析,返回一个整数 parseInt("123hua"); //输出 123 parseInt("123"); //输出 123 parseInt("12.3"); //输出 12 parseInt("hua"); //输出 Nan 2:另外parseInt()方法还有其他模式,就是可以把二进制.八进制.十六进制或其他任何进制的字符串转换成整数

南阳oj-244-16进制的简单运算

16进制的简单运算 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 现在给你一个16进制的加减法的表达式,要求用8进制输出表达式的结果. 输入 第一行输入一个正整数T(0<T<100000) 接下来有T行,每行输入一个字符串s(长度小于15)字符串中有两个数和一个加号或者一个减号,且表达式合法并且所有运算的数都小于31位 输出 每个表达式输出占一行,输出表达式8进制的结果. 样例输入 3 29+4823 18be+6784 4ae1-3d6c 样例输出 44114

NYOJ-244-16进制的简单运算

16进制的简单运算 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 现在给你一个16进制的加减法的表达式,要求用8进制输出表达式的结果. 输入 第一行输入一个正整数T(0<T<100000) 接下来有T行,每行输入一个字符串s(长度小于15)字符串中有两个数和一个加号或者一个减号,且表达式合法并且所有运算的数都小于31位 输出 每个表达式输出占一行,输出表达式8进制的结果. 样例输入 3 29+4823 18be+6784 4ae1-3d6c 样例输出 44114

NYOJ--244--16进制的简单运算(C++控制输入输出)

16进制的简单运算 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 现在给你一个16进制的加减法的表达式,要求用8进制输出表达式的结果. 输入 第一行输入一个正整数T(0<T<100000)接下来有T行,每行输入一个字符串s(长度小于15)字符串中有两个数和一个加号或者一个减号,且表达式合法并且所有运算的数都小于31位 输出 每个表达式输出占一行,输出表达式8进制的结果. 样例输入 3 29+4823 18be+6784 4ae1-3d6c 样例输出 44114

嵌入式linux C语言(一)——位运算的使用

嵌入式linux C语言(一)--位运算的使用 ARM是内存与IO统一编址,SoC中有很多控制寄存器,通过对这些寄存器进行位运算对这些控制寄存器进行设置,进而控制外设功能.在修改寄存器某些位的过程中不能修改其他的位. 一.位运算基础 C语言基本的位操作符有与.或.异或.取反.左移.右移六种位运算符.如下表所示: 符号 描述 运算规则 & 与 两个位都为1时,结果才为1 | 或 两个位都为0时,结果才为0 ^ 异或 两个位相同为0,相异为1 ~ 取反 0变1,1变0 << 左移 各二进位

C语言进制基本概念

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