2017-11-21 test6

本文介绍了三种不同的方法来计算一个整数二进制表示中1的个数,并提供了一个函数用于分离并显示一个整数的二进制表示中的奇数位和偶数位。此外,还提供了一个函数用于计算两个整数的二进制表示中有多少位不同。

##写一个函数返回参数二进制中 1 的个数
####fun1: 模2除2法
####fun2: 右移(按位与1)法
####fun3: (按位与i-1)法


#define _CRT_SECURE_NO_WARNING 1 
#include<stdio.h>
int fun1(unsigned int i){    //这里的unsigned将负数的首位二进制数当做数值参与运算
	//当i不为0时(说明其二进数补码中一定有1)执行循环(循环中每除一次2,可视作右移一位),循环内判断i%2是否为1,为1记录下来,最后返回记录次数。
	int count = 0;
	while (i!=0){
		if (i%2 == 1){
			count ++;
		}
		i=i/2;
	}

		return count;
}
	
int fun2(unsigned i){
	//当i不为0执行循环,循环内让i补码按位与1的补码,判断其末尾是否为1,在令i右移一位(效果等同于除以2)
	int count = 0;
	while (i){
	if ((i&1) == 1){
		count++;
	}
	i/=2;
	}
	return count ;
}

int fun3(unsigned i){
	//当i不为0时执行循环,循环内令i按位与i-1(按位与只有补码同一位同时为1时取1,其余均取0,所以只要i不为0,每次循环一定会不断的减少1的个数),最后返回循环的次数。
	int count = 0;
	while (i){
		i=i&(i-1);
		count ++;
	}
	return count ;
}

int main(){
	
	int input=0;
	int output=0;
	printf("请输入一个整数,系统将返回其补码中1的个数:\n");
	scanf("%d",&input);
	output = fun1(input);
	printf("该数的补码中1的个数为%d\n\n",output);
	output = fun2(input);
	printf("该数的补码中1的个数为%d\n\n",output);
	output = fun3(input);
	printf("该数的补码中1的个数为%d\n\n",output);

return 0;
}

###获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列。 
int fun(int i){
	int j=1;
	int num=i;
	char ch1[16]={0};    //要输出的奇数位 二进制序列
	char ch2[16]={0};    //要输出的偶数位 二进制序列
	for (j=0;j<16;j++){       //统一先对奇数位操作
		if ((num&1) == 1){     //末位为1
			ch1[j] = 1;
		}
		else {
			ch1[j] = 0;        //末位为0
		}
	   num >>=2; 
	
	}
	num=i;             //此时num已经为0,需要重新赋值
	num>>=1;           //让num先右移一位,从第二位开始操作
for (j=0;j<16;j++){                
		if ((num&1) == 1){
			ch2[j] = 1;       //末位为1
		}
		else {
			ch2[j] = 0;       //末位位0
		}
		num >>=2;     
		
	}
	printf("该数奇数位二进制序列为:\n");
	for (j=15;j>=0;j--){
		printf("%2d",ch1[j]);
	}
	printf("\n");
	printf("该数偶数位二进制序列为:\n");
	for (j=15;j>=0;j--){
		printf("%2d",ch2[j]);
	}
	return 0;
	}



	int main(){
		int b=0;
		scanf("%d",&b);
		fun (b);
		return 0;
	}

输出一个整数的每一位。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void fun(int i){
	//i不为0是,i对10取余,即是个位上的数字,用i对10的模继续循环,依次得到每一位的值.
	while (i){
		printf("%d\t",i%10);
		i /= 10;
	}
}
int main(){
	int a = 0;
	scanf("%d",&a);
	fun (a);
	return 0;
}

###编程实现:
两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
输入例子:
1999 2299
输出例子:7

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void fun(int i,int n){
     int u=0;
	 int count =0;
	 for (u=0;u<32;u++){        
		 if ((i&1) == (n&1)){
			 count ++;
		 }
		 i>>=1;
		 n>>=1;
	 }
	 printf("共有%d位不同\n",32-count);
}
		 
int main(){
     int a = 0;
	 int b = 0;
     scanf("%d%d",&a,&b);
	 fun (a,b);
  return 0;
}
以下是一个简单的基于Transformer算法的代码示例,可以用来预测SNumber。 ```python import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split from tensorflow.keras.models import Model from tensorflow.keras.layers import Input, Dense, Dropout, LayerNormalization, MultiHeadAttention, TimeDistributed, concatenate # 加载数据 data = pd.read_csv('data.csv') X = data.drop(['SNumber'], axis='columns') y = data['SNumber'] # 标准化输入特征 scaler = StandardScaler() X = scaler.fit_transform(X) # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, shuffle=False) # 构建Transformer模型 def transformer_model(input_shape): inputs = Input(shape=input_shape) x = Dense(64, activation='relu')(inputs) x = LayerNormalization()(x) x = Dropout(0.2)(x) x = Dense(32, activation='relu')(x) x = LayerNormalization()(x) x = Dropout(0.2)(x) x = Dense(1)(x) model = Model(inputs=inputs, outputs=x) return model # 训练模型 model = transformer_model((X_train.shape[1],)) model.compile(optimizer='adam', loss='mean_squared_error') model.fit(X_train, y_train, epochs=100, batch_size=16, validation_data=(X_test, y_test)) # 预测结果 y_pred = model.predict(X_test) # 可视化预测结果 plt.plot(y_test.values, label='True') plt.plot(y_pred, label='Predicted') plt.legend() plt.show() ``` 需要注意的是,这只是一个简单的示例,实际上可能需要进行更多的特征工程和调整模型参数来获得更好的预测结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值