将十进制转换为二进制(除二取余法 正整数的十进制)
int main() {
int number;
printf("请输入:");
scanf("%d",&number);
//统计出number中一的个数(number所对应的二进制)
int count;
while(number){
count += number % 2;
number = numer / 2;
}
pritnf("个数为%d",count);
}
(右移位&运算符实现统计一的个数)
int main() {
int number;
printf("请输入:");
scanf("%d",&number);
//统计出number中一的个数(number所对应的二进制)
int count;
//移位加按位&
for(int i=0;i<32;i++){
count += number >> i & 1;
}
printf("有%d个",count);
}
(x & -x)
int main(){
int num;
int count = 0;
while(num){
count++;
num = num - (number & (-num));
//每一次都取在最后一位的1然后扣掉再取下一个
//eg: 10--> 0000 1010
&
-10--> 1111 0110
result: 0010 (8)
(拿掉八)
}
}
赋值操作符 = (有方向性)
左边变量 = 右边表达式
*赋值操作符可以连续使用(可读性比较差)
复合赋值运算符
*解引用操作符
&取地址操作符
将11的第三位变成1
int a = 11;
int b = 1 << 2;
a= a | b;
三目运算符(?:)的运算顺序是从右往左
逗号表达式 , :整个表达式的最后一个才是真正的值,
但是都好表达式中括号内的所有运算会进行计算
结构体
自定义的数据类型,复杂数据类型
eg
int main(){
char name[] = "apple";
char address[] = "shaanxi";
double price = 12.3;
}
表示方法;(定义一个结构体)
struct Fruit() {
char name[10];
char address[10];
double price[10];
};(一定注意这里有个分号)
int main() {
struct Fruit apple = {"apple","shaanxi",12.5};
struct Fruit apple = {"li","shanxi",12.5};
}
//访问apple的名称、产地、价格使用.操作符
printf("%s,%s,%lf",apple.name,apple.address,apple.price);
struct Fruit *p=&apple;
printf("%s,%s,%lf\n",p->name,p->address,p->price);
回文数
int shidmao(){
char str[] = "hello";
//先计算长度
int length = sizeof(str)/sizeof(char);
//声明两个索引,一个指示左边,一个指示右边
int l = 0;
int r = length - 1 - 1;
while(l < r){
if(str[l] != str[r]){
return 0;
}
else{
l++;
r--;
}
}
}
将数字转换成字符串sprintf()
char butter[10];
int n = 10;
sprintf(buffer ,"%d",n);//"10"
判断丑数
int arr[] = {2,3,5};//质因子
int length = 3;
int ugly(){
//0的情况
if(num == 0){
return 0;
}
if(num == 1){
return 1;
}
for(int i=0;i<length-1;i++){
if(num % arr[i] = 0){
return ugly(num / arr[i]);
}
}
return 0;
}
表达式求值
int a = 10;
if(-1>sizeof(a)){
printf("hh");
}
else{
printf("ww");
}
result hh;
解释:求变量或类型在内存所占的字节大小,返回结果为size_t,unsigned int
将有符号类型转换为无符号类型
11111111 11111111 11111111 11111111
隐式数据类型的转换
C的整形算术运算总是以至少缺省整型类型的京都来进行的,为了获得这个精度
表达式式中的int和short会被转换成为普通的int类型来计算,这种转换被称为
整型提升
char a = 'a';
short b = 240;
char c = a + b; 转换成int来计算
eg:
char a = 3;//00000000 00000000 00000000 00000011
char b = 127;//00000000 00000000 00000000 01111111
//00000000 00000000 00000000 10000010 截断为 10000010
char c = a + b;//转换为整型int来对待
printf("%d",c);//10000010--提升为int类型:11111111 11111111 11111111 100000010
操作符的优先级,操作符的结合性,是否控制求值顺序
二者如果优先级相同,则会先看结合性
static:延长变量的使用周期