赞
踩
- 与运算(&):对两个数的每一位进行与操作,只有当两个位都是 1 时,结果的相应位才是 1。
- 或运算(|):对两个数的每一位进行或操作,只要有一个位是 1,结果的相应位就是 1。
- 异或运算(^):对两个数的每一位进行异或操作,当两个位不同时,结果的相应位是 1。
- 取反运算(~):对一个数的每一位进行取反操作,1 变成 0,0 变成 1。
- 左移运算(<<):将一个数的二进制表示向左移动指定的位数,右侧用 0 填充。 左移n位,相当于原数乘上2的n次方。
- 右移运算(>>):将一个数的二进制表示向右移动指定的位数,左侧用原数的符号位填充。 右移n位,相当于原数除以2的n次方。
1. 判断数字a奇偶性
x&1;
2.获得二进制数a的第 i 位
x>>i&1;
3.修改二进制数a的第 i 位
- //修改为1
- x|(1<<i)
- //修改为0
- n=x>>i;
- if(n==1) x=x&~(1<<5)
- //取反
- x^(1<<i);
4.交换数a和数b的值
- a=a^b;
- b=a^b;
- a=a^b;
各进制数在C++中的表示方法:
- 二进制:以0b或0B开头,后面的数字只能用0和1表示。例如:
int binary = 0b00000001;
。- 八进制:一般以0开头,但在转义字符后面,可以省略数字0。例如:
int oct = 01234567;
,char c = '\12';
。- 十进制:非数字0开头的一串数字。例如:
int val = 23;
。- 十六进制:以0x或0X开头的数字。例如:
char c = 0x30;
。
- #include<bits/stdc++.h>
-
- using namespace std;
-
- int ans=0,t;
- string str;
-
- int test01(string str,int t)
- {
- for(int i=0;i<str.size();i++)
- {
- if(str[i]>='0'&&str[i]<='9')
- {
- ans=ans+pow(t,i)*(str[i]-'0');
- }
- else ans=ans+pow(t,i)*(str[i]-'a'+10);
- }
- return ans;
- }
-
- int main()
- {
- cin>>str>>t;
- reverse(str.begin(),str.end());
- cout<<test01(str,t)<<endl;
-
- return 0;
- }

在 C++中,
strtol
函数的原型为:
long int strtol(const char *str, char **endptr, int base)
。其作用是将一个字符串转换为长整型
long
。参数说明:
str
:要转换的字符串。endptr
:第一个不能转换的字符的指针。base
:字符串str
所采用的进制,取值范围为2至36或0。该函数会将参数
str
字符串根据参数base
来转换成无符号的长整型数unsigned long
,并返回转换后的结果。如果没有符合的结果,则返回一个0值。参数base
代表str
采用的进制方式,如base
值为10则采用10进制,若base
值为16则采用16进制数等。
在 C++ 中,strtol
函数的参数通常是 const char*
类型,而不是直接使用 string
类型。要使用 strtol
函数处理 string
类型的参数,你可以先将 string
转换为 const char*
。例如,可以使用 c_str()
函数将 string
转换为 const char*
,然后将其传递给 strtol
。
- string str1;
- char *s2;
- long int ans =strtol(str1.c_str(), s2, 16);
实例:
- #include<bits/stdc++.h>
- using namespace std;
-
- char s1[20];
- char *s2;
- int ans;
-
- int main()
- {
- cin>>s1;
- ans=strtol(s1,&s2,16);
- cout<<ans;
- return 0;
-
- }
- #include<bits/stdc++.h>
- using namespace std;
-
- int a,t;
- string ans;
-
- string test02(int a,int t)
- {
- while(a!=0)
- {
- int temp=a%t;
- if(temp>=0&&temp<=9)
- {
- ans+=temp+'0';
- }
- else ans+=temp-10+'a';
- a/=t;
- }
- reverse(ans.begin(),ans.end());
- return ans;
- }
- int main()
- {
- cin>>a>>t;
- cout<<test02(a,t)<<endl;
-
- return 0;
- }

在 C++中,
itoa()
函数的参数不可以是string
类型。itoa()
函数是用于将整型数字转换为字符串的函数,其函数原型为
char *itoa(int value, char *str, int radix)
。参数说明:
value
是要转换的整型数字。str
是存储转换结果的字符数组或指针。radix
是转换时使用的基数,可以是2(二进制)、8(八进制)、10(十进制)或16(十六进制)。
需要注意的是,itoa()
并不是一个标准的 C++函数,它是 Windows 特有的,C++中可以使用——_itoa()形式或者使用sprintf()
函数来替代。
2.2.3 sprintf()
函数在 C++中,sprintf()
函数可以将十进制数转换为八进制和十六进制数,但不支持二进制。示例如下:
%o
表示转换为八进制,%x
表示转换为十六进制(小写字母),%X
表示转换为十六进制(大写字母)
- #include <iostream>
- #include <stdio.h>
- using namespace std;
-
- int main() {
- int a = 3633;
- // 将十进制转换为八进制
- char s1[20];
- sprintf(s1, "%o", a);
- cout << "八进制: " << s1 << std::endl;
- // 将十进制转换为十六进制
- char s2[20];
- // 小写字母表示
- sprintf(s2, "%x", a);
- cout << "十六进制(小写): " << s2 << std::endl;
- char s3[20];
- // 大写字母表示
- sprintf(s3, "%X", a);
- cout << "十六进制(大写): " << s3 << std::endl;
-
- return 0;
- }

本人水平有限,若有不足,欢迎指正!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。